你好的開發夥伴們,錯誤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
我從來沒有這樣的事情,我已經沒有想法。
您的幫助將非常感謝,非常感謝!
你能不能請張貼'unloadalluserform'潛艇的代碼進行覈對?因爲這也是一個主要問題?你不需要直接在'end sub'之前'exit sub'而不是'unload'在用戶表單中使用'me.hide' – psychicebola
我試着刪除無用的Exit Sub,但它沒有改變任何東西。我也嘗試使用Me.Hide或NameOfUserForm。隱藏;我沒有得到一個錯誤,但它並沒有關閉用戶表單(奇怪?)。 –
@ Seb.D我建議你把代碼放在你的問題中,這樣可以更容易閱讀。 – DragonSamu