🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

unerwartetes Symbol : End Sub

Alles zur Programmierung im LibreOffice.
Antworten
der_Zerstreute
Beiträge: 6
Registriert: Mo 6. Jun 2016, 16:21

unerwartetes Symbol : End Sub

Beitrag von der_Zerstreute » So 20. Aug 2023, 13:05

Hallo Leute,

seit einige Jahren nutze ich ein von mir geschriebenes LO/OO Basic Script um meine Rechnungsformulare zu befüllen.
Seit ein paar Tagen bekomme ich beim Start die Fehlermeldung "unerwartetes Symbol : end sub" , was dazu führt, dass ich die Makros nicht mehr verwenden kann. Ich kann auch keinen Grund für diese Fehlermeldung ermitteln. Vor allem, da ich außer einer Erweiterung auf das Linux Pfadsystem keine Veränderung am Code vorgenommen habe.

Hier ist das Problemkind und LO nölt direkt im ersten Sub rum, dass da ein unerwartetes End Sub auftaucht - verstehe ich nicht, da das erste Sub ja auch mal beendet werden muß.

Code: Alles auswählen

Global ReNr as string
Global Path as string
Global PathLFN as string
Global Auswahl as integer
Global KDmax as integer
Global KDselect(1)
Global Data(1)
Global KDAuswahl as object
Global KDdata as object
Global Adressen as string
Global Kunden(1,1)
Global KDwork(1)
Global MaxData as integer
Global LFN as string

Sub onStart

Globalscope.BasicLibraries.LoadLibrary("Tools")
DialogLibraries.LoadLibrary( "Standard" ) 
KDAuswahl = CreateUnoDialog(DialogLibraries.Standard.KD)
KDdata = CreateUnoDialog(DialogLibraries.Standard.KDdat)

Dim Zeile as String
dim temp as variant
dim otemp as object 
Dim Z as integer

' Datensatzanpassung
MaxData = 16 ' Anzahl der Spalten

Redim Data(MaxData)

Tabelle = ThisComponent.Sheets(0)
if FileExists("C:\Users\megat\HiDrive\11_Gewerbe\") then 
	Path = "C:\Users\megat\HiDrive\11_Gewerbe\"
else
 if FileExists("/home/daniel/NFS_Clouds/MasterDrive/11_Gewerbe/") then 
 	Path="/home/daniel/NFS_Clouds/MasterDrive/11_Gewerbe/"
end if

Adressen = ConvertToURL(Path & "Adressen.csv")
PathLFN = ConverttoURL(Path & right(str(year(now)),4) & "\LFN.txt")

' Wenn noch keine LFN Datei existiert, Datei erzeugen und mit 1 Starten
if not(fileexists(PathLFN)) then
 open (PathLFN) for output as #2 
  Print #2 "1"
 close #2
end if

oInputStream = CreateUnoService("com.sun.star.ucb.SimpleFileAccess").openFileRead(Adressen)
oFileRead = createUnoService("com.sun.star.io.TextInputStream")
oFileRead.InputStream = oInputStream
oFileRead.Encoding = "ISO-8859-15"

' -----------------------------------------------------------------------
' ---------- Ermitteln der Laufenden Rechnungsnummer --------------------
' -----------------------------------------------------------------------
open PathLFN for Input as #2
input #2 temp
close #2
LFN =val(temp) + 1
' -----------------------------------------------------------------------
' -------------- Ermitteln der Kundenanzahl -----------------------------
' -----------------------------------------------------------------------
open Adressen for input as #1
KDmax = -1
while not EOF(1)
Line input #1 Zeile
KDmax = KDmax+1
wend
close #1

' -----------------------------------------------------------------------
' -------------- Erstellen der Kundendatenbank---------------------------
' -----------------------------------------------------------------------
REdim KDselect(KDmax)
Redim Kunden(KDmax+1,MaxData)
Redim KDwork(KDmax+1)

for Z = 0 to KDmax

	Zeile = oFileRead.readLine
	KDwork(Z) = Zeile

	for i=0 to MaxData-1
		semi = instr(Zeile,";")
		Kunden(Z,i) = left(Zeile,semi)
		Kunden(Z,i) = deletestr(Kunden(Z,i),";")
		Zeile = right(Zeile,len(Zeile)-semi)
	next
	Kunden(Z,MaxData) = Zeile
next 
  
oInputStream.closeInput
oFileRead.closeInput
' -----------------------------------------------------------------------
' -------------- Datensatz für die Rechnung erstellen -------------------
' -----------------------------------------------------------------------
 For i = 1 to KDMax
 	Kunden(i,0) = right("0"&Kunden(i,0),2)
 	if Kunden(i,4) <>"" then 
 		temp = "("&Kunden(i,0)&") "& Kunden(i,4) &";"& Kunden(i,7)
 	Else
 		temp = "("&Kunden(i,0)&") "& Kunden(i,2) &" "& Kunden(i,3)
 	end if
 	if (Kunden(i,16)="aktiv") then KDAuswahl.getControl("Auswahlbox").addItem(temp,i-1)
 next
 KDAuswahl.execute()
 If Auswahl >0 then
 
' -----------------------------------------------------------------------
' -------------- Übertragen des ausgewählten Kunden ---------------------
' -----------------------------------------------------------------------

KDselect(0) = left(Kunden(Auswahl,3),1)&left(Kunden(Auswahl,2),1)&left(Kunden(Auswahl,5),1)&left(Kunden(Auswahl,6),3)&left(Kunden(Auswahl,7),1)
 if Kunden(Auswahl,4)<>"" then
	KDselect(1) = Kunden(Auswahl,4)
 Else
 	KDselect(1) = Kunden(Auswahl,1)
 end if

 if Kunden(Auswahl,4)<>"" then
	KDselect(2) = "z.Hd." & Kunden(Auswahl,1) & " " & left(Kunden(Auswahl,2),1) & ". " &Kunden(Auswahl,3)
 Else
 	KDselect(2) = Kunden(Auswahl,2) & " " & Kunden(Auswahl,3)
 end if

 if Kunden(Auswahl,1)="Herr" then 
 	KDselect(6) = "Sehr geehrter Herr " & Kunden(Auswahl,3) & ","
else
	  if Kunden(Auswahl,1)="Frau" then KDselect(6) = "Sehr geehrte Frau " & Kunden(Auswahl,3) & ","
end if
 
 temp = str(month(now))
 temp = right(temp,len(temp)-1)
 temp = right("0"&temp,2)
 
KDselect(7) = right(str(year(now)),1) &_
			  temp & "/" &_ 				
			  right(str(year(now)),2) &_
			  right("000" & right(str(LFN),len(str(LFN))-1),4) 
			  
	Kunden(Auswahl,14) = CDbl(Kunden(Auswahl,14))
	Kunden(Auswahl,15) = CDbl(Kunden(Auswahl,15))*.25/1.19

' -----------------------------------------------------------------------
' -------------- Übertragen des ausgewählten Kunden ---------------------
' -----------------------------------------------------------------------
Tabelle.getCellbyPosition( 1, 3).string = KDselect(0)				' Kundennummer 
Tabelle.getCellbyPosition( 1, 4).String = KDselect(1)			 	' Firma oder Anrede 
Tabelle.getCellbyPosition( 1, 5).String = KDselect(2) 				' Name
Tabelle.getCellbyPosition( 1, 6).String = Kunden(Auswahl,5) 		' Straße
Tabelle.getCellbyPosition( 1, 7).String = Kunden(Auswahl,6) 		' PLZ   
Tabelle.getCellbyPosition( 2, 7).String = Kunden(Auswahl,7) 		' Ort 

Tabelle.getCellbyPosition(11, 5).String = KDselect(7) 				' Rechnungsnummer
Tabelle.getCellbyPosition(11, 4).value  = Datevalue(now)			' Rechnungsdatum

Tabelle.getCellbyPosition(10,34).value  = Kunden(Auswahl,14)		' Stundensatz
Tabelle.getCellbyPosition(10,35).value  = Kunden(Auswahl,14)		' Stundensatz Anfahrt
end if

end sub
'==================================================================================
Sub fin
 Auswahl = val(Mid(KDAuswahl.getControl("Auswahlbox").text,2,2))
 if Auswahl = 0 then 
 	KDAuswahl.getControl("Auswahlbox").setFocus()
 	goto noend
 end if
 KDAuswahl.endexecute() 
 
noend:
end sub
'==================================================================================
Es wäre echt super, wenn irgendwer erkennen könnte, wo das Problem liegt.

Besten Dank schonmal im Vorraus ..
Daniel

Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2536
Registriert: Fr 10. Dez 2010, 10:01

Re: unerwartetes Symbol : End Sub

Beitrag von karolus » So 20. Aug 2023, 13:26

Tausche else gegen end if

Ups, da gibts ja mehrere elses … ich meine das allererste vor der linux-pfad-abfrage!

Du darfst aber auch den Umbruch zwischen else & if entfernen, sodass da elseif … steht.

ps. und weil ich grad so lese, das goto noend bitte gegen exit sub tauschen, und das label noend weglassen
LO7.4.7.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

der_Zerstreute
Beiträge: 6
Registriert: Mo 6. Jun 2016, 16:21

Re: unerwartetes Symbol : End Sub

Beitrag von der_Zerstreute » So 20. Aug 2023, 17:12

karolus hat geschrieben:
So 20. Aug 2023, 13:26
Tausche else gegen end if

Ups, da gibts ja mehrere elses … ich meine das allererste vor der linux-pfad-abfrage!

Du darfst aber auch den Umbruch zwischen else & if entfernen, sodass da elseif … steht.

ps. und weil ich grad so lese, das goto noend bitte gegen exit sub tauschen, und das label noend weglassen
Hey Karolus,

Danke für den Tip .. mir ist noch eine alternative Lösung aufgefallen, tatsächlich benötigt das "If" nach dem Else ein "End If" .. damit hatte ich nicht gerechnet.
Nachdem ich alle "else if" mit einem "end if" abgeschlossen hatte, funktionierte das wieder. Und das mit dem Goto hab ich durch eine geänderte Bedingung (anstatt =0, >0) umgangen. So wird der Folgebereich auch nicht ausgeführt, wenn er nicht benötigt wird.

Danke nochmal für deine Zeit und deine Hilfe.


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten