Live-Forum - Die aktuellen Beiträge
Datum
Titel
19.04.2024 12:23:24
19.04.2024 11:45:34
Anzeige
Archiv - Navigation
1716to1720
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Makro greift auf "veralteten" Zellenwert zu

Makro greift auf "veralteten" Zellenwert zu
04.10.2019 09:44:09
Erik
Liebe Gemeinde,
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 Problem
Wenn 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

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro greift auf "veralteten" Zellenwert zu
04.10.2019 09:59:08
Erik
Liebe Gemeinde,
ich habe es lösen können. Boah ey. Ich hatte vorher schon mit .OnTime experimentiert, aber wer lesen kann...

Application.OnTime Now + TimeValue("00:00:05"), "Tage_markieren"
Das ist die Lösung. Danke für eure Aufmerksamkeit. Wenn noch jemand Lust hat, mir zu erklären, warum das Excel überhaupt so macht, dann wäre ich trotzdem dankbar. :)
LG Erik
Anzeige

304 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige