387 Aufrufe
Gefragt in Tabellenkalkulation von

Hallo Leute

Ich möchte eine Datumsreihe im Tabellenblatt erstellen

also so etwas

01.01.2021

02.01.2021

03.01.2021

....

Dazu wähle ich in meinem Kalender das Startdatum und das Enddatum aus. Anschließend klicke ich in eine beliebige freie Zelle im Tabellenblatt, von wo aus die Datumsreihe beginnen soll.

Der Code soll das Startdatum in die selektierte Zelle kopieren und von dort aus eine Datumsschleife erzeugen.

Der erste Teil(das kopieren des Startdatums  funktioniert), der zweite Teil mit der Schleife nicht (bzw. es passiert überhaupt nichts, keine Fehlermeldung)

Vielleicht möchte Einer mal über den Code gucken. Wäre super, wenn einer mir detailiert erklären könnte, warum nichts passiertbzw wie es funktionieren könnte

Wichtig ist, dass der Anwender den Beginn der Datumsreihe selber festlegen soll. Also keine feste Zelladresse.

Hier mein derzeitiger Code:

Private Sub CommandButton4_Click()
'Beinn der Schleife festlegen!
Selection = ActiveSheet.Range("D1")
'Datumsschleife durchführen!
Dim z As Integer
Dim SelectierteZelle As Integer
Dim Schleifenende As Integer
Dim DatumDifferenz
Dim Datum1 As Date
Dim Datum2 As Date

    Datum1 = ActiveSheet.Range("D1")
    Datum2 = ActiveSheet.Range("F1")
    
    DatumDiffernz = DateDiff("D", Datum1, Datum2)
    Schleifenende = SelectierteZelle + DatumDifferenz
    SelectierteZelle = Selection.Row
For z = SelectierteZelle To Schleifenende
    Cells(z, Selection.Column) = z
Next z

End Sub

1 Antwort

0 Punkte
Beantwortet von xlking Experte (1.5k Punkte)
 
Beste Antwort

Hallo,

zunächst mal hast du einen Tippfehler im Namen deiner Variable. Bei DatumDiffernz fehlt ein e. Dadurch wird der Variablen zwar ein Wert zugewiesen, dieser kommt aber in der nachfolgenden Zeile nicht an. Da du dort korrekt geschrieben hast handelt es sich um zwei verschiedene Variablen. Die Variable DatumDifferenz bleibt also beim Wert 0.

Zweitens verwendest du die Variable SelectierteZelle bereits, bevor du dieser einen Wert zuweist. Damit ist auch diese Variable zunächst 0. Du rechnest also Schleifenende = 0 + 0 Damit ist letztlich auch Schleifenende 0. Du musst also die Befehlszeilen für Schleifenende und SelectierteZelle tauschen.

Da du vor Schleifenbeginn der Variablen SelectierteZelle die Selection.Row zuweist, ist nun Schleifenende < SelectierteZelle. In diesem Fall wird die Schleife gar nicht erst ausgeführt.

Selbst wenn die Schleife ausgeführt würde, hättest du nicht das gewünschte Ergebnis. Denn es würde kein Datum eingetragen sondern die Zeilennummer die du in der Variablen z gespeichert hast.

Tipps: All das kannst du leicht herausfinden, wenn du dein Makro per Einzelschritt mit F8 Zeile für Zeile durchgehst. Einfach mit der Maus auf die jeweilige Variable zeigen, nachdem du die Zeile ausgeführt hast, dann erscheint ein kleines Tiptext-Fenster das dir den Inhalt der Variablen anzeigt. Du kannst auch zusätzliche Befehle wie Debug.Print Variablenname einbauen, der dir den Inhalt der Variablen in einem dafür vorgesehenen Fenster im VBA-Editor wiedergibt.

Tippfehler bei Variablennamen kannst du vermeiden, indem du als allererste Zeile (noch vor der ersten Sub) den Befehl Option Explicit einbaust. Dann musst du allerdings jede einzelne Variable zu Beginn mit Dim deklarieren, was du bereits gemacht hast.

Um der Variablen z das laufende Datum zuzuweisen musst du die Schleife wie folgt generieren: For z = Datum1 To Datum2 Dann kannst du wie geplant den Inhalt von z der Zelle zuweisen. Hier der ganze Code:

Option Explicit
Private Sub CommandButton4_Click()
'Datumsschleife durchführen!
Dim i As Long
Dim z As Date
Dim Datum1 As Date
Dim Datum2 As Date

    Datum1 = ActiveSheet.Range("D1")
    Datum2 = ActiveSheet.Range("F1")
    
For z = Datum1 To Datum2
    Cells(Selection.Row + i, Selection.Column) = z
    i = i + 1
Next z

End Sub

Gruß Mr. K.

...