Wenn das _Change-Ereignis geworfen wird, wird jene Prozedur durchlaufen.
In dieser Prozedur rufst Du nun Dein Makro auf. Da Dein Makro nun in einem allgemeinen Modul steht, kann es ja nicht wissen, auf welches Blatt der Code auszuführen ist.
Diese Informationen empfängt ein Makro über den Prozedurkopf.
1 2 3 4 5 6 | Sub MeinMakroImAllgemeineModulStehend(SollAufDiesemWorksheetAusgeführtWerden)
Sub MeinMakroname( ByRef wks As Excel.Worksheet)
|
Der Aufruf geschieht dann folgendemassen:
1 2 3 | Private Sub Worksheet_Change( ByVal Target As Range)
Call MeinMakroname(Target.Parent)
End Sub
|
Im allgemeinen Makro stünde dies:
1 2 3 4 5 6 7 8 | Option Explicit
Sub MeinMakroname( ByRef wks As Excel.Worksheet)
With wks
End With
End Sub
|
Jetzt hast Du den Code in ein Modul ausgelagert. Hat den Vorteil, dass Du Ihn nicht in jedem Arbeitsblatt wiederholen musst.
Das müsstest DU nämlich, weil Dein _Change-Event() zur Klasse Worksheet gehört.
Da bist auch schon beim nächsten Problem. Wenn nun weitere Arbeitsbläter dazukommen (sollen), welche ebenfalls auf das _Change_Event() reagieren sollen bzw Dein ausgelagertes Makro auf dem neuen Worksheet auch wirken soll, kommst Du nun nicht drumrum, den Code(Aufruf) auch da wieder reinzuschreiben.
Drei, vier Mal geht das. Aber bei 50+ schreibst X-Mal dasselbe. Wenn dann eine Änderung gemacht werden muss, dann prost Mahlzeit
Ist denk ich klar soweit.
Frage:
Wird das so der Fall sein?
Wenn ja, emfpiehlt sich hier die Klassenprogrammierung.
Hier wird der Code wiederum ausgelagert mit dem Ziel alle Change_Events() einfach abzugreifen. Egal wie viele Blätter es sind, waren oder werden.
Du schreibst den Code jeweils einmal und must dDich nicht wiederholen.
Genug geschrieben. Sag bescheid wenn Ich sonst noch helfen kann.
|