Excel: Makro aus Tabellenblatt in Add-in auslagern

Salu zusammen,

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?

Danke schon mal und viele Grüße
-Rob.

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