Das sieht man,...
30.12.2007 04:51:00
Luc:-?
...aber trotzdem schon recht ordentlich, Daniel... ;-)
Die Dim-Anweisung steht immer als Erste nach der Kopfzeile! Dann folgt hier die Zeile, _
die die Grundvoraussetzungen überprüft und auf Folgendes zu ändern ist...
With ActiveSheet
If Not Intersect(Target, .Cells(7, 13), .Range("M12:M16")) Then Exit Sub
For Each r In .Range("20:58").Rows
Next r
End With
Die With-Konstruktion spart hier die mehrfache Wiederholung von ActiveSheet. Außerdem lässt sich das Ganze auch schneller ändern, falls du die Ereignisprozedur (eine VBA-Subroutine, so wäre die richtige Bezeichnung!) mal in mehreren Blättern des ActiveWorkbook anwenden willst und sie deshalb in das Dokument-(Klassen-)modul der Arbeitsmappe verlegst (With sh!).
Ganz komplett wäre das Ganze, wenn du zuletzt noch die Objektvariable Target wieder freigibst (mit Set Target = Nothing). Die Objektvariable r "repräsentiert" nach Zyklusdurchlauf ohnehin Nichts. Da du das auch bei Nichterfüllung der Anfangsbedingung tun solltest, wäre statt Exit Sub entweder ein Sprung zu diesem letzten Befehl (mit Marke, z.B. GoTo ex und ex: am Anfang dieser letzten Zeile) oder die entsprechende Ausweitung der If...Then- zu einer If...Then...Else...-Konstruktion angebracht.
Übrigens, falls du mal eine umfangreichere Ereignisprozedur schreiben solltest, wäre es zweckmäßig, diese quasi als Verteiler zu konstruieren. D.h., nur Gültigkeitsabfragen reinnehmen und davon abhängig zu ausführenden "normalen" Subroutinen verzweigen, also diese dann aufrufen, Call prozedurname. (Ich schreibe nämlich auch Funktionen, die automatische Ereignisprozedur-Ergänzungen vornehmen... ;-))
Gruß + Guten Rutsch!
Luc :-?