2016-09-01 1 views
5

Ich benutze PERSONAL.XLSB, um globale Makros auszuführen. In ihm, ich höre auch Anwendungsereignisse, indem Sie diese in der ThisWorkbook Objekt:Excel-Anwendungsereignisse: Wie wird die WithEvents-Variable nach einem Laufzeitfehler automatisch zurückgesetzt?

Dim WithEvents app As Application 
Private Sub Workbook_Open() 

    Set app = Application 

End Sub 

Jetzt kann ich auf alle Arbeitsmappe Ereignisse hören, ohne ein Ereignis für jede Arbeitsmappe verkabeln zu müssen.

Das Problem ist, dass immer dann, wenn ein Makro eine Ausnahme auslöst und bewirkt, dass ich das Makro Ende haben, alle globalen Variablen nuked erhalten, so dass die app Variable Nothing gesetzt werden, die nicht mehr Feuer all globalen Ereignisse verursacht .

Gibt es eine Möglichkeit, wie diese Variable automatisch auf eine Instanz von Application zurückgesetzt werden kann, wenn sie gelöscht wird?

Antwort

1

Sie können eine öffentliche Funktion erstellen, die die Standardwerte aller globalen Variablen enthält, und diese Funktion dann unter Ihrem Fehlerhandle aufrufen. Unten ist und Beispiel

Dim WithEvents app As Application 
Private Sub Workbook_Open() 
    On Error Got To reset 
    Set app = Application 
On Error goto 0 
Exit Sub 
Reset: 
Call resetvar 

End Sub 

Public Sub Resetvar() 
     Set app = Application 
End Sub 
Verwandte Themen