VBA Datum von bis fortlaufend

lockcat

Erfahrenes Mitglied
Hi,

ich möchte gerne in Zelle A1 und B2 das Start- und Enddatum angeben - er soll mir nun automatisch via VBA die Datum's tage ausgeben?

wie gehe ich am besten vor?
 

Yaslaw

n/a
Moderator
Spalte oder Zeile?
Ich gehe mal davon aus, dass du eine Spalte abfülen willst:
Visual Basic:
Public Sub genDates()
    'Definitionen
    Const C_ADR_FROM = "A1"     'Zelle Start Datum
    Const C_ADR_TO = "A2"       'Zelle End Datum
    Const C_COL_TARGET = "B"    'Zielspalte
   
    'Informationen auslesen
    Dim ws As Worksheet:    Set ws = ActiveSheet
    Dim fromDate As Date:   fromDate = ws.Range(C_ADR_FROM).Value
    Dim toDate As Date:     toDate = ws.Range(C_COL_TARGET).Value
   
    'Anzahl Tage bestimmen
    Dim cntDays As Long:    cntDays = DateDiff("d", fromDate, toDate) + 1
   
    'Start Datum übernehmen
    ws.Range(C_COL_TARGET & 1).Value = fromDate
   
    'ZielRange definieren
    Dim target As Range:    Set target = ws.Range(C_COL_TARGET & "1", C_COL_TARGET & cntDays)
   
    'Range mit Datum füllen
    target.DataSeries , xlChronological, xlDay
End Sub
 

lockcat

Erfahrenes Mitglied
Das schaut schon echt gut aus, jedoch bekomme ich ein laufzeitfehler von "1004 anwendungs- oder objektdefinierter fehler" ich bin nun total durcheinander mit voller Daten...
 

Yaslaw

n/a
Moderator
Ups, mir ist da noch ein Fehler unterlaufen.
Beim toDate habe ich die falsche Konstante gesetzt

Visual Basic:
    Dim toDate As Date:  toDate = ws.Range(C_ADR_TO).Value
 

lockcat

Erfahrenes Mitglied
Supe Yaslaw bist heut mein Hero :D schaut schon echt gut aus... wäre es auch möglich zu prüfen ob der Tag bzw. Datum ein Samstag ,Sonntag oder Feiertag ist? ferner farblich hervorheben?

Hast du vllt. ein Lösungsansatz?

Gruß
 

Yaslaw

n/a
Moderator
Häng einfach noch den folgenden Code am Ende der Methode an und definieren die Formatierung (Farbe etc.)

Visual Basic:
  'Bedingte Formatierung.
  'Formel: =WEEKDAY($B1;2)>=6$
  target.FormatConditions.Delete
  Dim fc As FormatCondition: Set fc = target.FormatConditions.Add(xlExpression, xlCreatorCode, "=WEEKDAY($" & C_COL_TARGET & "1;2)>=6")
   
  fc.Interior.Color = RGB(125, 125, 125)

Feiertage sind schwerer. Dazu müsstest du eine Feiertagsliste erstellen und mit dieser abgleichen.
 
Zuletzt bearbeitet:

lockcat

Erfahrenes Mitglied
Ich hab da doch nochmal ne frage... das mit der Farblichen Darstellung schaut nicht so aus kann ich gleich im Code deklarieren dass er mir diese bestimmten Tage nicht ausgibt?

Gruß
 

Yaslaw

n/a
Moderator
Ich sehe grad 2 Möglichkeiten:
1) Schreib den Code um und nimm das target.DataSeries() heraus. Schreibe dselber einen Loop, der auch nach WE prüft

2) Markiere die WE mit einer Farbe so wie jetzt. Filtere danach und lösch die Zeilen. Dass kannst du sogar mit der Macroaufnahme selber erstellen.