Problem bei Ereignissen mit dem Application-Objekt
24.06.2004 14:51:56
Joachim
vielleicht kann mir jemand weiterhelfen.
Zunächst mal der Code, dann meine Frage(n)!!!
Folgender Code befindet sich in einem ADDIN:
*****DIESE ARBEITSMAPPE*****
Option Explicit
Private Sub Workbook_Open()
Subs.Klasseninitialisierung
End Sub
*****Standardmodul SUBS*****
Option Explicit
Dim x As New Klassenmodul
Sub TestSub()
'Anweisungen, die einen Fehler auslösen
End Sub
Sub Klasseninitialisierung()
Set x.App = Application
End Sub
*****KLASSENMODUL*****
Option Explicit
Public WithEvents App As Application
Private Sub App_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Subs.TestSub
End Sub
Beim Laden des Addins wird über das Workbook_open Ereignis die Prozedur Klasseninitialisierung im Modul 'Subs' aufgerufen.
Sodann reagiert jede Arbeitsmappe wie gewünscht auf die Ereignisse des Application-Objekts.
In meinem Beispiel wird beim Selection_change-Ereignis die Prozedur 'Testsub' aufgerufen.
Wenn sich in der 'Testsub' ein Fehler befindet, wird (wie nicht anders zu erwarten) die Ausführung des Programms unterbrochen. Dann setze ich die Codeausführung in der VBA-IDE zurück und behebe den Fehler.
Leider reagieren dann die Arbeitsmappen nicht mehr auf das Selection_change-Ereignis des Klassenmoduls. Die Klasse muss ich dann erst wieder initialisieren.
Weiß jemand von Euch warum Excel so reagiert?
Kann es sein, dass auch unter anderen Umständen die Ereignisse des Application-Objekts "verschwinden" / bzw. nicht mehr ausgeführt werden?
(...
Bei aller Theorie - das alles hat folgenden Hintergrund:
Ich bin gerade dabei den Code und alle Formulare eines mit der Zeit sehr komplex gewordenen Berechnungsprogramms in ein AddIn auszulagern.
Mein Ziel ist es die Excelmappe so gut wie komplett von VBA-Code zu befreien.
In der Excelmappe befindet sich im Workbook_open-Ereignis nur noch der Code für das Laden des Addins.
Im Addin befindet sich wie in meinem Beispiel von oben ein Klassenmodul mit den Ereignissen des Application-Objekts. Außerdem sind dort nun alle für die Programmausführung notwendigen Formulare und Prozeduren.
Momentan bin ich nun dabei alle Fehler auszumerzen und stelle nun , dass wenn die Programmausführung unterbrochen wurde, die Ereignisse des Application-Objekts nicht funktionieren.
Ich hoffe jetzt, dass ich mit meinem Vorhaben und der Idee eines Addins nicht in eine Sackgasse laufe.
...)
Klingt alles sehr kompliziert!?
Ich sag jetzt schon mal VIELEN DANK