Beurteilung: In Zellen aufeinanderfolgende Datumsangaben hinzufügen

  • Excel

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von SoEinVBler.

    Beurteilung: In Zellen aufeinanderfolgende Datumsangaben hinzufügen

    Guten Abend,

    ich habe gerade diesen VBA-Code geschrieben (funktioniert). Könnte das jemand bitte beurteilen und sagen, was eleganter geht? Der Code soll weitere Datumsangaben hinzufügen. Ein Erstdatum steht in der Excel drin.

    Danke & Viele Grüße
    Bartosz


    VBA

    Quellcode

    1. Option Explicit
    2. Sub Add_Datumsangaben(n As Integer)
    3. Dim WB As Workbook
    4. Dim WS As Worksheet
    5. Set WB = ActiveWorkbook
    6. Set WS = Sheets("Gesamt")
    7. WB.Activate
    8. WS.Select
    9. Dim Last As Integer
    10. Last = WS.Cells(Rows.Count, 1).End(xlUp).Row + 1
    11. Dim End_ As Integer
    12. End_ = Last + n - 1
    13. Dim i As Integer
    14. Dim currentDate As Variant
    15. currentDate = WS.Cells(Last - 1, 1).Value
    16. For i = Last To End_
    17. currentDate = DateAdd("d", 1, currentDate)
    18. WS.Cells(i, 1).Value = currentDate
    19. WS.Cells.NumberFormat = "dd.mm.yyyy"
    20. Next i
    21. End Sub
    22. Sub Makro1()
    23. Add_Datumsangaben 5
    24. End Sub


    Hi,

    ich schreib einfach mal was mir so auffällt.

    Die Variable bzw. der Code für WB, also für das aktive Workbook, ist nicht notwendig.
    Du weißt WB das aktive Workbook zu, und setzt dann kurz drauf WB als aktive, das ist ja schon aktiv.

    Die Variablen-Deklarationen würde ich alle nach oben setzen.

    Dann noch die Überlegung die Variable currentDate auch als Date zu deklarieren.(Obwohl ich da grad nicht weiß ob es beim Zuweisen Probleme macht, kann ich gerade nicht testen)

    In der Schleife weißt du allen Zellen das Format zu, und nicht nur der gefüllten

    Vermutlich würde ich mir auch die Variable End_ sparen und in der Variable Last wirklich die letzte Zeile speichern.
    Aber das ist vermutlich Ansichtsache.
    Genau so wie die Zeile wo du das Datum hoch zählst. Da ich weiß, dass bei einer Datumsvariable die "Tage" gezählt werden, würde ich mir diese sparen
    und beim füllen der Zelle einfach addieren.
    (kann das ganze jetzt nicht testen aber so würde es ungefär bei mir aussehen.)

    Visual Basic-Quellcode

    1. Option Explicit
    2. Sub Add_Datumsangaben(n As Integer)
    3. Dim WS As Worksheet
    4. Dim Last As Integer
    5. Dim i As Integer
    6. Dim currentDate As Date
    7. Set WS = Sheets("Gesamt")
    8. WS.Select
    9. Last = WS.Cells(Rows.Count, 1).End(xlUp).Row
    10. currentDate = WS.Cells(Last , 1).Value
    11. For i = 1 To n
    12. WS.Cells(Last + i, 1).Value = currentDate+i
    13. WS.Cells(Last + i, 1).NumberFormat = "dd.mm.yyyy"
    14. Next i
    15. End Sub
    16. Sub Makro1()
    17. Add_Datumsangaben 5
    18. End Sub

    Vielen Dank. Ich bin relativ Anfänger, was VBA angeht. Ich komme aus dem VB.NET / C#.NET Bereich und arbeite mit WinForms. Wenn es überhaupt zu Excel kam, habe ich mittels VB.NET auf eine Excel-Datei zugegriffen. Daher kommt auch mein Stil. Ich bin das gar nicht gewohnt, alle Variablen nach oben zu schreiben und nicht auf's Workbook zuzugreifen

    Eine Sache noch, was ich vergessen habe zu erwähnen. Das Makro soll ab und an (1 × die Woche) ausgeführt werden. Vielleicht auch öfter. Das heißt, die Zeilennummer beginnt nicht immer ganz oben bei 2. Daher besorge ich mir die letzte Zeile.
    Hallo,

    dein Code ist ja auch ok, er macht ja was er soll. (bis auf das mit dem Numberformat vermutlich)
    Du arbeitest ja auch schon mit der Variablen WS (für Worksheet) was ich am anfang (ziemlich lange) nicht gemacht habe.
    Excel / VBA ist da ja sehr tollerant.


    Ob man die Schleife wie bei dir macht oder anders, bleibt eh einem selbst überlassen, wollte nur noch eine Variante ins Spiel bringen.

    Was eher noch zu überlegen wäre, ist zu prüfen, was als letzte Zeile gefunden wird. (hängt aber von dem "Format" deiner Datei ab)
    Es gibt glaub ich 3 Möglichkeiten.

    1. die Spalte ist komplett leer, dann wird mit .End(xlUp).Row, die 1. (leere) Zeile gefunden. Datum gibt es dann auch keins (auser 1.1.19xx oder so) und es wird dann in Zeile 2 geschrieben.

    2. es gibt eine Überschrift, aber kein Datum, dann wird die Überschrift gefunden aber kein Datum.

    3. es gibt ein Datum, dann ist alles gut.