2014-02-17 163 views
2

嗨,我是Excel VBA的新手,所以這可能很明顯,如果是的話,我表示歉意。EXcel VBA對象被破壞

我正在實例化Workbook_Open()中的一些全局對象(類),並試圖爲這些類編寫包裝函數,以在各種工作表中調用UDF s。如果這些函數中的任何一個失敗並出現未捕獲錯誤,則所有這些全局對象均設置爲空。

爲什麼會發生這種情況,因爲我可能以爲也許只有我操縱的全局對象不會受到全部影響,除了關閉工作簿並重新打開以重建它們以外,還有其他任何解決方案調試?

的實例僅僅是

Private Sub Workbook_Open() 
    Dim i as Integer 
    For i = 0 to nStreams 
     Set gStream(i) = New CStream 
    Next i 
End Sub 
+0

所有的全局變量被重置比如在代碼中調用Stop。如果要將工作簿打開事件的全局對象設置解耦,請將其移至獨立的Sub,並從打開的事件中調用它。如果你需要「重啓」你的項目,那麼你也可以從其他代碼中調用它。 –

回答

1

您可以從Workbook_Open事件進行分割你的「設置全局」代碼:如果出現未捕獲的錯誤或在其他情況下

Private Sub Workbook_Open() 
    SetGlobals 
End Sub 

'in a regular module 
Public Sub SetGlobals() 
    Dim i as Integer 
    For i = 0 to nStreams 
     Set gStream(i) = New CStream 
    Next i 
End sub