在VBA excel 2016中精确debugging一个被调用的Userform

我想知道是否有更聪明/更准确的方法来debuggingVBA中的用户表单初始化,这是从特定模块调用的。

因为当我在Userform_initialisatize中编写错误的一段代码时,我收到的错误声明了一个错误,但不是它发生的地方,突出显示的一段代码只是call Userform_intitialize而我仍然猜测Sub Userform_intitialize哪一段Sub Userform_intitialize包含错误。

因此,在每次less量代码工作之后,逐步构build带有testing运行的用户窗体,以创build稳定的Userform启动代码。 因为我知道自从上次成功运行以来发生了什么变化,但是如果我能立即知道错误发生在哪里,尤其是在试运行消耗大量时间的情况下,这将节省相当长的一段时间。

那么有什么方法来提取在哪个行中确切的错误发生在一个被称为Sub Userform_intitialize在VBA Excel 2016?

正如@ASH所提到的, Initialize事件的处理程序应该保持private 。 那是因为Initialize事件本身是私有的,所以它被打算由实例本身处理,而不是被其他人处理。

那么有什么方法来提取在哪个行中确切的错误发生在一个被称为Sub Userform_intitialize在VBA Excel 2016?

关于你的问题,是的,仍然可以提取错误发生的行号。 但是这些行必须是源代码的一部分。 然后可以使用函数VBA.Information.Erl来获取行号。 例:

用户窗体模块

 Option Explicit Private Const MODULE_NAME As String = "MyUserForm." Private Sub UserForm_Initialize() On Error GoTo Error_In_UserForm_Initialize 1 Const procName As String = "UserForm_Initialize" ' Some code here 2 Dim d As Date 3 d = Now 4 MsgBox "Hi from my userform! 'Now' is '" & d & "'", vbInformation, "Info" ' Here error occures, max. value of Integer is 32.767 5 Dim i As Integer 6 i = 40000 7 Exit Sub Error_In_UserForm_Initialize: 8 Dim errorDescription As String 9 With Err 10 errorDescription = "Error '" & .Number & "'" & _ " with description '" & .Description & "'" & _ " occured in procedure '" & MODULE_NAME & procName & "'" & _ IIf(Erl <> 0, " on line '" & CStr(Erl) & "'.", ".") 11 End With 12 MsgBox errorDescription, vbCritical, "Error" End Sub 

关于Erl 在这里或这里的一些额外的阅读。