Klassenmodul für mappenübergreifendes Ereignis
ich möchte gern einen ganzen Haufen von Makros einer Mappe in
ein Add-in auslagern. Bei jenen in Modulen ist das auch kein
Problem, nur wie mache ich das, wenn bestimmte Zellen
überwacht werden, wenn also das VBA-Script einem Tabellenblatt
zugeordnet sein muß, damit es funktioniert?
Geht das überhaupt?
Hallo Rob,
ja, das geht mit einem Klassenmodul.
Im Editor Einfügen—Klassenmodul.
Drücke F4 und vergib dafür einen sprechenden Namne wie z.B.
clsApp
Im Klassenmodul schreibst du zu oberst:
Option Explicit
Public WithEvents App As Application
Nun siehst du oben in der Auswahlzeile Class, gehe auf den Pfeil und wähle App aus.
Dann siehst du rechts in der Auswahlzeile die Ereignisse auf die das Klassenmodul reagieren kann, wähle da mit dem Pfeil
SheetChange aus.
Wie üblich erscheint dann die Prozedurhülle dazu, die füllt du mit dem Code aus der bei Change geschehen soll wie hier:
Private Sub App_SheetChange(ByVal Sh As Object, ByVal Target As Range)
MsgBox Target.Address(0, 0)
MsgBox Sh.Name
MsgBox Sh.Parent.Name
MsgBox ActiveSheet.Name
MsgBox ActiveWorkbook.Name
End Sub
Jetzt muß das Ganze nur noch deklariert und initialisiert werden.
Dafür schreibst du im Modul „Diese Arbeitsmappe“ folgendes:
Option Explicit
Dim AppClass As New clsApp
Private Sub Workbook_Open()
Set AppClass.App = Application
End Sub
Jetzt mit F5 die Prozedur Workbook_Open starten oder diese Mappe neu öffnen, dann kannst ja in beliebigen Blättern testen…
Gruß
Reinhard