错误处理后卸载表单时出现错误 91

Error 91 when unloading form after Error Handling

各位开发者大家好,

我目前正在 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

(对不起,我不能post整个文件,它是相当机密的)

我在每个子函数或函数中编写了该代码以及行号,因此如果出现错误,它会转到 PROC_ERR,调用 LogGenerator,它会生成一个包含模块名称的 .txt 文件, sub/function 名称,行号,错误号。我不知道这是否是最好的方法,但它很有效。

到现在。

现在,当此代码在用户窗体代码中运行时,会生成日志,但用户窗体不会关闭。这是非常危险的,因为它仍然是 "active",这意味着即使之前出现错误,用户仍然可以输入数据并进行验证。

I tried put "Unload Me "in PROC_ERR, (I tried put it after/before "Exit Sub", after/before the call of LogGenerator), 但我得到错误 91(不能 post 图片,我需要更多声望...)。但是,它有效,并卸载了用户窗体...

我写了一个 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_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

我从来没有过这样的事情,我已经没有想法了。

非常感谢您的帮助,非常感谢!

如我和用户 3964075 所述,您不能在 Initialize 事件中卸载。

您必须传递一个 Boolean,在 Initialize 事件被检查到子
之后 如果TRUE= Unload 如果False = 继续