Erstmal vielen Dank für deine Antwort.
Finde es raus, indem Du einen Haltepunkt setzt und via F8 dann zeilenweise das Makro manuell laufen lassen kannst.
Ich habe auch mal probiert und die if-Abfrage wird nur 1. ausgeführt.
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.
Ich möchte eigendlich, dass das Programm auf alle Zeilen reagiert. Das Problem ist halt, dass wenn ich Zellen gleichzeitig ändere, welche über ein paar Monaten verteilt waren, werden alle Zellen in den ersten Monat verschoben, wo die If-Abfrage ist.
Ich habe eher an sowas wie eine for-schleife (python) gedacht, wo ich jede Zelle einzeln abfragen kann, um jede Zelle in den richtigen Monat zu verschieben.
(etwa sowas
for item in Target.Cells:
Select Case item.Column
Case 7 To 37
'***
Sheets("Januar 23").Range(Target.Address).Value = Range(Target.Address).Value
Case 38 To 65
Case usw usf
)
Mal abgesehen davon, dass Du diesen Code jedes Jahr aufs Neue umschreiben musst (Blattnamen)
Ich habe es nur aus Verständniszwecken als Namen benannt. In meinem Script verwende ich Sheets(1), um keine Namen hardcoden zu müssen. Ich muss nur ein weiteres Exemplar (oder voll automatisch) machen, um die Schaltjahre mit einzubeziehen.
würde Ich Dir empfehlen auf eine If-Abfrage zu reduzieren und Deine vielen ELSEIF-Abfragen durch ein Select-Case-Statment zu ersetzen.
Da ich bei VBA recht neu bin und mich zuvor eher mit Python beschäftigt habe, ist mir nicht eingefallen, dass es in anderen Sprachen auch noch die Case-Funktion gibt.
Das hier:
Range(Target.Address).Value
Wird vereinfacht so formuliert:
Target.Value
Es war mir nicht bewusst, dass man das abkürzen kann.
Ich würde mich freuen, wenn es eine gute Lösung gibt.
LG
|