🙏 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. 🤗

Syntaxfehler bei If - Then

Alles zur Programmierung im LibreOffice.
Antworten
Peter 0308
Beiträge: 2
Registriert: Do 26. Dez 2024, 21:21

Syntaxfehler bei If - Then

Beitrag von Peter 0308 » Do 26. Dez 2024, 22:03

Hallo zusammen,
ich bin neu hier und möchte mich kurz vorstellen.
Ich heiße Peter und bin ein sehr alter "Knacker". Jetzt habe ich mir vorgenommen für Libre Office Calc Makros in Basic zu schreiben. Meine Programmierkenntnisse sind uralt und außer PHP und MySQL nur rudiment.

Da ich reiner Autodidakt bin, habe ich mir ein Ziel gesetzt und werde das Schritt für Schrit zu verwirklichen versuchen.

Mein Ziel: Automatische Erstellung eines Jahreskallender incl. Feiertagen auf Grund der in Zelle A1 eingegebenen Jahreszahl.

Anfangen will ich mit der Erstellung der Feiertage des Jahres, was bei den fixen Daten ja nur eine Zuweisung des Datums und der Bezeichnung zu einer Konstanten Variable ist. Die beweglichen Feiertage basieren alle auf das Datum des Ostersonntag des entsprechenden Jahres. Und die Berechnung dieses Datum soll mein erstes Makro werden. (Bitte keinenen Verweis auf die Funktion "Ostersonntag" in Libre Office geben, ich will es ja selbst berechnen).
Berechnen will ich das Datum mit der Gauß´schen Osterformel. Und das ist mein erster Versuch:

Code: Alles auswählen

Option Explicit

Sub Ostersonntag

REM... Variablendeklaration

Dim A%, B%, C%, D%, E%, TAG%, JJJJ%
Dim MONAT$
Dim DATUM
Dim oSheet as Object, oCell as Object

REM Ende der Variablendeklaration

REM Zugriff auf aktuelle Tabelle
oSheet = ThisComponent.CurrentController.getActiveSheet()

REM Zugriff auf bestimmte Zelle
oCell = oSheet.getCellRangeByName("A1")
JJJJ = oCell.getValue("A1")

REM Gauß´sche Osterformel
A = JJJJ Mod 19
B = JJJJ Mod 4
C = JJJJ Mod 7
D = ((A * 19) + 24) Mod 30
E = ((B * 2) + (C * 4) +(D * 6) + 5) Mod 7
TAG = 22 + D + E
If TAG <= 31 
	Then MONAT = "März"
	ElseIf MONAT = "April"
End If
If MONAT = "April"
	Then TAG = TAG - 31
End If

REM Datum des Ostersonntag zusammensetzen
DATUM = TAG & "." & MONAT & "." & JJJJ

MsgBox DATUM

End Sub
Bei diesem Code bekomme ich bei der ersten If-Then-Anweisung einen Sytax Error. Markiert wird die "31" Und die Meldung sagt, das sie ein "Then" erwartet. Auch wenn ich Klammern um die Bedingung setzte ändert sich nichts an der Fehlermeldung. Markiert wird immer das letzt Zeichen der Bedingung.

Jetzt meine Frage: Was mache ich falsch? Liegt der Fehler eventuell schon weiter vorne?

Ich bin für jeden Tipp dankbar.

mfg
Peter

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Syntaxfehler bei If - Then

Beitrag von F3K Total » Fr 27. Dez 2024, 09:27

Moin,
das mit dem ElseIF ist so eine Sache, in diesem Fall aber auch nicht nötig, so ginge es auch:

Code: Alles auswählen

Option Explicit

Sub Ostersonntag

REM... Variablendeklaration

Dim A%, B%, C%, D%, E%, TAG%, JJJJ%
Dim MONAT$
Dim DATUM
Dim oSheet as Object, oCell as Object

REM Ende der Variablendeklaration

REM Zugriff auf aktuelle Tabelle
oSheet = ThisComponent.CurrentController.getActiveSheet()

REM Zugriff auf bestimmte Zelle
oCell = oSheet.getCellRangeByName("A1")
JJJJ = oCell.getValue("A1")

REM Gauß´sche Osterformel
A = JJJJ Mod 19
B = JJJJ Mod 4
C = JJJJ Mod 7
D = ((A * 19) + 24) Mod 30
E = ((B * 2) + (C * 4) +(D * 6) + 5) Mod 7
TAG = 22 + D + E
If TAG <= 31 Then
	MONAT = "März"
Else 
	MONAT = "April" 
End If

If MONAT = "April"	Then 
    TAG = TAG - 31
End If

REM Datum des Ostersonntag zusammensetzen
DATUM = TAG & ". " & MONAT & " " & JJJJ

MsgBox DATUM

End Sub
Das THEN muss zudem in der Zeile des IF stehen
Wenn du auf das ElseIF bestehst, hinter dem ElseIF fehlt die 2. Bedingung(TAG > 31)
Ich habe es mit dieser Seite hinbekommen. Kann man aber auch in der LibreOffice Hilfe (F1) finden:
Makros und Scripte/LibreOffice BASIC/Befehlsreferenz/Funktionen, Anweisungen und Operatoren/Steuern von Programmanweisungen/Entscheidungen

Code: Alles auswählen

Option Explicit

Sub Ostersonntag

REM... Variablendeklaration

Dim A%, B%, C%, D%, E%, TAG%, JJJJ%
Dim MONAT$
Dim DATUM
Dim oSheet as Object, oCell as Object

REM Ende der Variablendeklaration

REM Zugriff auf aktuelle Tabelle
oSheet = ThisComponent.CurrentController.getActiveSheet()

REM Zugriff auf bestimmte Zelle
oCell = oSheet.getCellRangeByName("A1")
JJJJ = oCell.getValue("A1")

REM Gauß´sche Osterformel
A = JJJJ Mod 19
B = JJJJ Mod 4
C = JJJJ Mod 7
D = ((A * 19) + 24) Mod 30
E = ((B * 2) + (C * 4) +(D * 6) + 5) Mod 7
TAG = 22 + D + E
If TAG <= 31 Then
	MONAT = "März"
ElseIf TAG > 31 Then
	MONAT = "April" 
ELSE
    MONAT =""
End If

If MONAT = "April"	Then 
    TAG = TAG - 31
End If

REM Datum des Ostersonntag zusammensetzen
DATUM = TAG & ". " & MONAT & " " & JJJJ

MsgBox DATUM

End Sub
Gruß R
Windows 11: AOO, LO Linux Mint: AOO, LO

Peter 0308
Beiträge: 2
Registriert: Do 26. Dez 2024, 21:21

Re: Syntaxfehler bei If - Then

Beitrag von Peter 0308 » Fr 27. Dez 2024, 12:25

Hallo F3K,

vielen Dank für die schnelle Hilfe.
Das THEN muss zudem in der Zeile des IF stehen
Das ist mir neu, und hier anscheinend der Hauptfehler gewesen.
Die ElseIf Anweisung habe ich früher auch nie verwendet. Hier hatte ich sie eingesetzt weil ich wohl bei Beispielscripten etwas falsch verstanden habe. Danke für den Hinweis.

Jetzt funktioniert mein erstes (einfaches) Makro. Wahrscheinlich werde ich hier noch sehr viele Fragen stellen müssen, bis mein Ziel erreicht werden kann. ;)

Gruß
Peter


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