2015-08-25 64 views
0

你好的開發夥伴們,錯誤91時,錯誤處理

我目前工作的一個小項目我在VBA實習爲Excel後卸載形式(這是我第一次在VBA做一個項目)。該程序包含幾個模塊和用戶表單,並且幾乎完成,所以我實現了錯誤處理。

我用:

Sub ....... 
ModName = "NameOfTheModule" 
SubName = "NameOfTheSub/Function" 
On Error GoTo PROC_ERR 

/code 

Exit Sub 
PROC_ERR: 
Call LogGenerator(ModName, SubName, Erl, Err.Number, Err.Description) 
Exit Sub 

End Sub 

(對不起,我不能張貼整個文件,這是相當保密的)

我在每個子或函數寫的代碼,行號一起,所以如果出現錯誤,它會轉到PROC_ERR,調用LogGenerator,它將生成一個帶有模塊名稱,子/函數名稱,行號,錯誤號的.txt文件。我不知道這是否是最好的方式,但它是一種享受。

直到現在。

現在,當此代碼運行在用戶窗體代碼中時,會生成日誌,但UserForm不會關閉。這是非常危險的,因爲它仍然是「活躍的」,這意味着用戶仍然可以將數據和驗證,即使之前有錯誤。我試着在PROC_ERR中放入「卸載我」(我在LogGenerator的調用之後/之前試圖把它放在/ Exit Sub之後),但是我得到一個錯誤91(不能發佈圖片,我需要更多的聲譽......)。然而,它的工作原理,並卸載UserForm ...

我寫了一個Sub UnloadAllUserForm,我用LogGenerator Sub調用,但得到相同的錯誤。

我沒有任何調試幫助,比如通常在VBA編輯器中(突出顯示錯誤的行),但是我使用Debug.Print管理,發現它帶有「Unload」提示行錯誤。

我在UnloadAllUserform Sub中添加了錯誤處理,甚至嘗試「On Error Resume Next」,但錯誤仍然顯示!

Sub UnloadAllUserForm() 
    On Error GoTo PROC_ERR 
    ModName = "Errhandler" 
    SubName = "UnloadAll" 
    Dim frm As UserForm 
    For Each frm In UserForms 
    frm.Hide 
    Next frm 
    Exit Sub 
    PROC_ERR: 
    Call LogGenerator(ModName, SubName, Erl, Err.Number, Err.Description) 
    Exit Sub 
End Sub 

只有當UserForm_Initialize子文件有錯誤時,我纔會得到error91。但是,無論UserForm是什麼,我都會在任何UserForm_Initialize子項中出現錯誤91。我仍然把一個UserForm_initialize在這裏的樣本:

'Initialisation de l'UserForm 
Private Sub UserForm_Initialize() 

ModName = "UserFormAjoutItem" 
SubName = "UserFormAjoutItem_Initialize" 
On Error GoTo PROC_ERR 


10 'On définit la page "Ajout pièce comme la page par défaut à l'ouverture 
20 MultiPage.Value = 0 
30 
40 'Pour chaque objet de type TextBox présent dans l'UserForm, on  initialise à valeur vide 
50 Dim z As Control 
60 For Each z In UserFormAjoutItem.Controls 
70 If TypeName(z) = "TextBox" Then 
80  z.Value = vbNullScript 
90 End If 
100 Next z 

Exit Sub 

PROC_ERR: 
Unload Me 
Call LogGenerator(ModName, SubName, Erl, Err.Number, Err.Description) 
Exit Sub 


End Sub 

我從來沒有這樣的事情,我已經沒有想法。

您的幫助將非常感謝,非常感謝!

+0

你能不能請張貼'unloadalluserform'潛艇的代碼進行覈對?因爲這也是一個主要問題?你不需要直接在'end sub'之前'exit sub'而不是'unload'在用戶表單中使用'me.hide' – psychicebola

+0

我試着刪除無用的Exit Sub,但它沒有改變任何東西。我也嘗試使用Me.Hide或NameOfUserForm。隱藏;我沒有得到一個錯誤,但它並沒有關閉用戶表單(奇怪?)。 –

+0

@ Seb.D我建議你把代碼放在你的問題中,這樣可以更容易閱讀。 – DragonSamu

回答

0

正如我和用戶3964075所述,您無法在Initialize事件中卸載。

你將不得不通過一項Boolean,經過初始化事件獲取子
如果TRUE = Unload如果False =繼續