2016-09-01 22 views
5

Używam PERSONAL.XLSB do wykonywania globalnych makr. W nim, ja też słuchać zdarzeń aplikacji w ten sposób w obiekcie ThisWorkbook:Zdarzenia aplikacji Excel: Jak automatycznie resetować zmienną WithEvents po wystąpieniu błędu środowiska wykonawczego?

Dim WithEvents app As Application 
Private Sub Workbook_Open() 

    Set app = Application 

End Sub 

Teraz mogę słuchać wszystkich zdarzeń skoroszytu bez konieczności drut zdarzenie do każdego skoroszytu.

Problem polega na tym, że gdy makro zgłasza wyjątek i sprawia mi musiał End makro, wszystkie zmienne globalne dostać nuked, więc zmienna app zostanie ustawiony na Nothing co powoduje wszystkie globalne zdarzenia nie dłuższym ognia .

Czy jest jakiś sposób, aby można było automatycznie ustawić tę zmienną na instancję Application, gdy zostanie ona usunięta?

Odpowiedz

1

Możesz utworzyć funkcję publiczną, która zawiera wartości domyślne wszystkich zmiennych globalnych, a następnie wywołaj tę funkcję pod uchwytem błędu. Poniżej znajduje się przykład i przykład:

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