Aber ich denke halt, dass es nur für die erste Zelledie if-abfrage ausführt und dass die anderen Zellen einfach ohne if-Abfrage abruft.
Finde es raus, indem Du einen Haltepunkt setzt und via F8 dann zeilenweise das Makro manuell laufen lassen kannst.
Einen Haltepunkt setzt man, wenn man auf höhe der gewünschten Codezeile in den grauen Bereich klickt:
Wenn Du jetzt eine Änderung im Kalender machst, wird der Code bis zu dieser Zeile/diesem Haltepunkt ausgeführt und wartet, ob es entweder zeilenweise mit F8 (manuell) oder F5 (automatisch) weitergehen soll
.
Jetzt wollte ich fragen, ob es einen Weg gibt, dass man auf jede Zelle einzeln das vba-script über Worksheet_Change(ByVal Target As Range) laufen lassen kann.
Der Code in diesem Bereich wird immer dann ausgeführt, wenn es in einer Zelle, egal welche, in diesem Arbeitsblatt, eine Änderung gibt.
Wenn Du nun nur bei bestimten Zellen reagieren möchtest, musst Du das innerhalb dieser Prozedur abfragen. Das kannst Du über die Objektvariable Target. Target hält eine Referenz zu einer Zelle oder zu vielen Zellen. Auch das kannst Du dann abfragen.
Mal abgesehen davon, dass Du diesen Code jedes Jahr aufs Neue umschreiben musst (Blattnamen), würde Ich Dir empfehlen auf eine If-Abfrage zu reduzieren und Deine vielen ELSEIF-Abfragen durch ein Select-Case-Statment zu ersetzen.
Skizziert:
If Target.Cells.Count = 1 Then '*** prüfen, ob Target nur eine Zelle referenziert
Select Case Target.Column
Case 7 To 37
'***
Sheets("Januar 23").Range(Target.Address).Value = Range(Target.Address).Value
Case 38 To 65
Case usw usf
End Select
End If
Übrigens:
Das hier:
Range(Target.Address).Value
Wird vereinfacht so formuliert:
Target.Value
|