Makro greift auf "veralteten" Zellenwert zu
04.10.2019 09:44:09
Erik
ich habe folgendes Problem und bin irriert.
Ich habe ein Tabellenblatt als Kalender. In A1 steht der Monatserste, in allen darauffolgenden Zellen (in der gleichen Zeile), steht dann der formelbasierte 2., 3., 4. usw. Erstmal nichts Außergewöhnliches. Die Tage werden mit der Formel
[B1] = A1+1
[C1] = B1+1
[D1] = C1+1
usw.
berechnet.A1 ist beschreibbar und wird durch eine Combobox im Tabellenblatt geändert (mit einer Auswahl an verschiedenen Monaten/Jahren in der Schreibweise "Monat Jahr").
Nun habe ich ein Makro, mit dem ich alle Zellen markiere, die Wochenende sind.
Das Makro
Public Sub Tage_markieren(Bereich As Range, Optional MarkierenBis As Long)
Dim Datum As Date
Dim Spalte As Range
Dim Zelle As Range
For Each Zelle In Bereich.Cells
If VBA.Len(Zelle.Value) = 0 Then
With tblKalender
Set Spalte = .Range(.Cells(Zelle.Row, Zelle.Column), .Cells(MarkierenBis, Zelle. _
Column))
End With
Spalte.Interior.Color = VBA.vbWhite
GoTo Weiter
End If
If VBA.IsDate(Zelle.Value) = False Then
With tblKalender
Set Spalte = .Range(.Cells(Zelle.Row, Zelle.Column), .Cells(MarkierenBis, Zelle. _
Column))
End With
Spalte.Interior.Color = VBA.vbWhite
GoTo Weiter
End If
If MarkierenBis = 0 Then MarkierenBis = Zelle.Row
Datum = VBA.CDate(Zelle.Value)
'Wochenenden markieren
If Application.WorksheetFunction.Weekday(Datum, 2) = 6 Or Application.WorksheetFunction. _
Weekday(Datum, 2) = 7 Then
With tblKalender
Set Spalte = .Range(.Cells(Zelle.Row, Zelle.Column), .Cells(MarkierenBis, Zelle. _
Column))
End With
Spalte.Interior.Color = VBA.RGB(217, 217, 217)
'Normale Tage markieren/zurücksetzen
Else
With tblKalender
Set Spalte = .Range(.Cells(Zelle.Row, Zelle.Column), .Cells(MarkierenBis, Zelle. _
Column))
End With
Spalte.Interior.Color = VBA.vbWhite
End If
Weiter:
Next
End Sub
Ausgelöst wird das Ganze durch das Change-Ereignis der ActiveX-Combobox im gleichen Tabellenblatt:
Private Sub cbxMonate_Change()
tblKalender.Range("A1").Value = VBA.CDate(cbxMonate.Value)
Tage_Markieren Range("B1:AF1")
End Sub
Das ProblemWenn ich nun per Combobox das Datum in A1 ändere, markiert mir das Makro immer die Wochenenden des Monats, der zuvor in A1 stand, obwohl die Formeln in B1 ff. mir das korrekte Datum anzeigen. Außerdem scheint Excel das Makro auszuführen bevor die Werte in der Tageszeile aktualisiert werden, obwohl im Tabellencode das Schreiben des Monats in A1 vor dem Markieren der Tage steht.
Vielleicht stehe ich auch auf dem Schlauch. Ich habe schon versucht Schritt für Schritt zu debuggen, aber ich komm einfach nicht dahinter... :(
Ich danke euch für jeden Tipp und verbleibe
mit herbstlichen Grüßen aus dem Tal der Ahnungslosen
Erik