Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

Syntax Fehler VBA

Forumthread: Syntax Fehler VBA

Syntax Fehler VBA
13.11.2024 09:38:46
An
Ich bekomme leider immer einen Syntaxfehler (einmal dick markiert, wiederholt sich), kann dies jedoch nicht beheben. Hier mein VBA Code:

Sub ErstelleUrlaubsplan()

' Variablen deklarieren
Dim ws As Worksheet
Dim i As Integer
Dim datum As Date
Dim startDatum As Date
Dim endDatum As Date
Dim urlaub As Variant
Dim schulferien(5, 1) As Date ' 2D-Array für Schulferien
Dim ferienStart As Date
Dim ferienEnde As Date
Dim urlaubDatum As Variant

' Neues Arbeitsblatt erstellen
Set ws = ThisWorkbook.Sheets.Add
ws.Name = "Urlaubsplan 2025"

' Titel der Spalten
ws.Cells(1, 1).Value = "Datum"
ws.Cells(1, 2).Value = "Wochentag"
ws.Cells(1, 3).Value = "Astrid"
ws.Cells(1, 4).Value = "Simon"
ws.Cells(1, 5).Value = "Laura"
ws.Cells(1, 6).Value = "Schulferien Niedersachsen"
ws.Cells(1, 7).Value = "Bemerkungen"

' Startdatum für 2025
startDatum = DateSerial(2025, 1, 1)

' Schulferien in Niedersachsen (Start- und Enddaten)
schulferien(0, 0) = DateSerial(2025, 2, 2): schulferien(0, 1) = DateSerial(2025, 2, 14) ' Winterferien
schulferien(1, 0) = DateSerial(2025, 4, 7): schulferien(1, 1) = DateSerial(2025, 4, 18) ' Osterferien
schulferien(2, 0) = DateSerial(2025, 5, 26): schulferien(2, 1) = DateSerial(2025, 6, 7) ' Pfingstferien
schulferien(3, 0) = DateSerial(2025, 6, 21): schulferien(3, 1) = DateSerial(2025, 8, 2) ' Sommerferien
schulferien(4, 0) = DateSerial(2025, 10, 6): schulferien(4, 1) = DateSerial(2025, 10, 18) ' Herbstferien
schulferien(5, 0) = DateSerial(2025, 12, 22): schulferien(5, 1) = DateSerial(2025, 12, 31) ' Weihnachtsferien

' Für jedes Datum im Jahr 2025
For i = 0 To 364
datum = startDatum + i

' Datum und Wochentag einfügen
ws.Cells(i + 2, 1).Value = datum
ws.Cells(i + 2, 2).Value = Format(datum, "dddd")

' Ferien und Urlaubsmarkierungen
ws.Cells(i + 2, 6).Value = ""
ws.Cells(i + 2, 3).Value = ""
ws.Cells(i + 2, 4).Value = ""
ws.Cells(i + 2, 5).Value = ""

' Schulferien überprüfen und markieren
For j = 0 To 5
ferienStart = schulferien(j, 0)
ferienEnde = schulferien(j, 1)

If datum >= ferienStart And datum = ferienEnde Then
ws.Cells(i + 2, 6).Value = "Ferien"
Exit For
End If
Next j

' Urlaubszeiten für Astrid (2D-Array)
urlaub = _
Array( _
Array(DateSerial(2025, 12, 22), DateSerial(2025, 12, 31)), ' Astrid Weihnachten
Array(DateSerial(2025, 12, 15), DateSerial(2025, 12, 19)), ' Astrid Dezember
Array(DateSerial(2025, 11, 21), DateSerial(2025, 11, 21)), ' Astrid November
Array(DateSerial(2025, 10, 13), DateSerial(2025, 10, 17)), ' Astrid Herbst
Array(DateSerial(2025, 8, 4), DateSerial(2025, 8, 8)), ' Astrid Sommer
Array(DateSerial(2025, 7, 2), DateSerial(2025, 7, 4)), ' Astrid Juli
Array(DateSerial(2025, 4, 14), DateSerial(2025, 4, 17)), ' Astrid April
Array(DateSerial(2025, 1, 30), DateSerial(2025, 1, 30)) ' Astrid Januar
)


' Urlaub für Astrid eintragen
For Each urlaubDatum In urlaub
If datum >= urlaubDatum(0) And datum = urlaubDatum(1) Then
ws.Cells(i + 2, 3).Value = "Urlaub"
Exit For
End If
Next urlaubDatum

' Urlaubszeiten für Simon (2D-Array)
urlaub = _
Array( _
Array(DateSerial(2025, 12, 22), DateSerial(2025, 12, 24)), ' Simon Weihnachten
Array(DateSerial(2025, 7, 21), DateSerial(2025, 7, 25)), ' Simon Sommer
Array(DateSerial(2025, 6, 23), DateSerial(2025, 6, 27)), ' Simon Juni
Array(DateSerial(2025, 4, 7), DateSerial(2025, 4, 11)), ' Simon April
Array(DateSerial(2025, 1, 2), DateSerial(2025, 1, 3)), ' Simon Januar
Array(DateSerial(2025, 4, 14), DateSerial(2025, 4, 17)), ' Simon April
Array(DateSerial(2025, 6, 2), DateSerial(2025, 6, 6)) ' Simon Juni
)

' Urlaub für Simon eintragen
For Each urlaubDatum In urlaub
If datum >= urlaubDatum(0) And datum = urlaubDatum(1) Then
ws.Cells(i + 2, 4).Value = "Urlaub"
Exit For
End If
Next urlaubDatum

' Urlaubszeiten für Laura (2D-Array)
urlaub = _
Array( _
Array(DateSerial(2025, 12, 29), DateSerial(2025, 12, 31)), 'Laura Weihnachten
Array(DateSerial(2025, 9, 15), DateSerial(2025, 9, 19)), ' Laura September
Array(DateSerial(2025, 7, 14), DateSerial(2025, 7, 18)), ' Laura Juli
Array(DateSerial(2025, 5, 30), DateSerial(2025, 5, 30)), ' Laura Mai
Array(DateSerial(2025, 4, 22), DateSerial(2025, 4, 25)), ' Laura April
Array(DateSerial(2025, 4, 14), DateSerial(2025, 4, 17)), ' Laura April
Array(DateSerial(2025, 1, 2), DateSerial(2025, 1, 3)) ' Laura Januar
)

' Urlaub für Laura eintragen
For Each urlaubDatum In urlaub
If datum >= urlaubDatum(0) And datum = urlaubDatum(1) Then
ws.Cells(i + 2, 5).Value = "Urlaub"
Exit For
End If
Next urlaubDatum

Next i

' Formatieren der Tabelle
ws.Columns("A:G").AutoFit
ws.Range("A1:G1").Font.Bold = True
ws.Range("A1:G1").HorizontalAlignment = xlCenter
ws.Rows("2:366").HorizontalAlignment = xlCenter

MsgBox "Urlaubsplan für 2025 wurde erfolgreich erstellt!"
End Sub


Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Syntax Fehler VBA
13.11.2024 09:48:09
Crazy Tom
moin,

Kommentare mitten in einem Ausdruck?

vielleicht so?

ungetestet

urlaub = _

Array(Array(DateSerial(2025, 12, 22), DateSerial(2025, 12, 31)), _
Array(DateSerial(2025, 12, 15), DateSerial(2025, 12, 19)), _
Array(DateSerial(2025, 11, 21), DateSerial(2025, 11, 21)), _
Array(DateSerial(2025, 10, 13), DateSerial(2025, 10, 17)), _
Array(DateSerial(2025, 8, 4), DateSerial(2025, 8, 8)), _
Array(DateSerial(2025, 7, 2), DateSerial(2025, 7, 4)), _
Array(DateSerial(2025, 4, 14), DateSerial(2025, 4, 17)), _
Array(DateSerial(2025, 1, 30), DateSerial(2025, 1, 30))) 'alles Astrid


mfg Tom



Anzeige
AW: ohne Kommentare im Umbruch
13.11.2024 11:17:50
MCO
Hi!

Natürlich gehören mitten in umgebrochene Codezeilen (mit _) keine Kommentare.
Außerdem müsstest du das Einrücken von Schleifen u. ä. nochmal üben...

Getestet sieht es dann so aus:
Sub ErstelleUrlaubsplan()


' Variablen deklarieren
Dim ws As Worksheet
Dim i As Integer
Dim datum As Date
Dim startDatum As Date
Dim endDatum As Date
Dim urlaub As Variant
Dim schulferien(5, 1) As Date ' 2D-Array für Schulferien
Dim ferienStart As Date
Dim ferienEnde As Date
Dim urlaubDatum As Variant

' Neues Arbeitsblatt erstellen
Set ws = ThisWorkbook.Sheets.Add
ws.Name = "Urlaubsplan 2025"

' Titel der Spalten
ws.Cells(1, 1).Value = "Datum"
ws.Cells(1, 2).Value = "Wochentag"
ws.Cells(1, 3).Value = "Astrid"
ws.Cells(1, 4).Value = "Simon"
ws.Cells(1, 5).Value = "Laura"
ws.Cells(1, 6).Value = "Schulferien Niedersachsen"
ws.Cells(1, 7).Value = "Bemerkungen"

' Startdatum für 2025
startDatum = DateSerial(2025, 1, 1)

' Schulferien in Niedersachsen (Start- und Enddaten)
schulferien(0, 0) = DateSerial(2025, 2, 2): schulferien(0, 1) = DateSerial(2025, 2, 14) ' Winterferien
schulferien(1, 0) = DateSerial(2025, 4, 7): schulferien(1, 1) = DateSerial(2025, 4, 18) ' Osterferien
schulferien(2, 0) = DateSerial(2025, 5, 26): schulferien(2, 1) = DateSerial(2025, 6, 7) ' Pfingstferien
schulferien(3, 0) = DateSerial(2025, 6, 21): schulferien(3, 1) = DateSerial(2025, 8, 2) ' Sommerferien
schulferien(4, 0) = DateSerial(2025, 10, 6): schulferien(4, 1) = DateSerial(2025, 10, 18) ' Herbstferien
schulferien(5, 0) = DateSerial(2025, 12, 22): schulferien(5, 1) = DateSerial(2025, 12, 31) ' Weihnachtsferien

' Für jedes Datum im Jahr 2025
For i = 0 To 364
datum = startDatum + i

' Datum und Wochentag einfügen
ws.Cells(i + 2, 1).Value = datum
ws.Cells(i + 2, 2).Value = Format(datum, "dddd")

' Ferien und Urlaubsmarkierungen
ws.Cells(i + 2, 6).Value = ""
ws.Cells(i + 2, 3).Value = ""
ws.Cells(i + 2, 4).Value = ""
ws.Cells(i + 2, 5).Value = ""

' Schulferien überprüfen und markieren
For j = 0 To 5
ferienStart = schulferien(j, 0)
ferienEnde = schulferien(j, 1)

If datum >= ferienStart And datum = ferienEnde Then
ws.Cells(i + 2, 6).Value = "Ferien"
Exit For
End If
Next j

' Urlaubszeiten für Astrid (2D-Array)
urlaub = Array( _
Array(DateSerial(2025, 12, 22), DateSerial(2025, 12, 31)), _
Array(DateSerial(2025, 12, 15), DateSerial(2025, 12, 19)), _
Array(DateSerial(2025, 11, 21), DateSerial(2025, 11, 21)), _
Array(DateSerial(2025, 10, 13), DateSerial(2025, 10, 17)), _
Array(DateSerial(2025, 8, 4), DateSerial(2025, 8, 8)), _
Array(DateSerial(2025, 7, 2), DateSerial(2025, 7, 4)), _
Array(DateSerial(2025, 4, 14), DateSerial(2025, 4, 17)), _
Array(DateSerial(2025, 1, 30), DateSerial(2025, 1, 30)) _
)

' Urlaub für Astrid eintragen
For Each urlaubDatum In urlaub
If datum >= urlaubDatum(0) And datum = urlaubDatum(1) Then
ws.Cells(i + 2, 3).Value = "Urlaub"
Exit For
End If
Next urlaubDatum

' Urlaubszeiten für Simon (2D-Array)
urlaub = Array( _
Array(DateSerial(2025, 12, 22), DateSerial(2025, 12, 24)), _
Array(DateSerial(2025, 7, 21), DateSerial(2025, 7, 25)), _
Array(DateSerial(2025, 6, 23), DateSerial(2025, 6, 27)), _
Array(DateSerial(2025, 4, 7), DateSerial(2025, 4, 11)), _
Array(DateSerial(2025, 1, 2), DateSerial(2025, 1, 3)), _
Array(DateSerial(2025, 4, 14), DateSerial(2025, 4, 17)), _
Array(DateSerial(2025, 6, 2), DateSerial(2025, 6, 6)) _
)

' Urlaub für Simon eintragen
For Each urlaubDatum In urlaub
If datum >= urlaubDatum(0) And datum = urlaubDatum(1) Then
ws.Cells(i + 2, 4).Value = "Urlaub"
Exit For
End If
Next urlaubDatum

' Urlaubszeiten für Laura (2D-Array)
urlaub = Array( _
Array(DateSerial(2025, 12, 29), DateSerial(2025, 12, 31)), _
Array(DateSerial(2025, 9, 15), DateSerial(2025, 9, 19)), _
Array(DateSerial(2025, 7, 14), DateSerial(2025, 7, 18)), _
Array(DateSerial(2025, 5, 30), DateSerial(2025, 5, 30)), _
Array(DateSerial(2025, 4, 22), DateSerial(2025, 4, 25)), _
Array(DateSerial(2025, 4, 14), DateSerial(2025, 4, 17)), _
Array(DateSerial(2025, 1, 2), DateSerial(2025, 1, 3)) _
)

' Urlaub für Laura eintragen
For Each urlaubDatum In urlaub
If datum >= urlaubDatum(0) And datum = urlaubDatum(1) Then
ws.Cells(i + 2, 5).Value = "Urlaub"
Exit For
End If
Next urlaubDatum
Next i

' Formatieren der Tabelle
ws.Columns("A:G").AutoFit
ws.Range("A1:G1").Font.Bold = True
ws.Range("A1:G1").HorizontalAlignment = xlCenter
ws.Rows("2:366").HorizontalAlignment = xlCenter

MsgBox "Urlaubsplan für 2025 wurde erfolgreich erstellt!"
End Sub


Gruß, MCO
Anzeige

Forumthreads zu verwandten Themen

Anzeige
Anzeige