如何通过后期绑定调用Excel VBA过程

时间:2014-07-18 11:24:54

标签: excel vba

我在这里寻求一些建议。

我有一个电子表格,其中包含可以从Worksheet_Change事件中调用的各种模块和过程。当我需要从工作簿中发出工作表以供其他用户完成时,这会导致问题。

每当用户尝试更新工作表时,on change事件就会被触发,导致编译错误,因为被调用的过程不存在,并且这不能被捕获(据我所知)。我已尝试使用Application.EnableEvents = False,但这是在工作表事件中,并且一旦触发事件,代码就会中断。

无论如何通过后期绑定调用一个程序,我可以捕获错误吗?

我现在正在尝试这样的事情。

Dim mdl as object

' Test for module in workbook, if error, then exit routine
Set mdl = Application.ActiveWorkbook.VBProject.VBComponents("mdlSharedFunctions")

'If no error, then call procedure here
call mdl.UpdateData(Target)

'Or
Application.Run mdl.UpdateData(Target)

这些呼叫方法都不起作用,我希望那里的某个人能指出我正确的方向。

干杯

皮特

1 个答案:

答案 0 :(得分:0)

你可以使用一个全局变量作为标志 - 位脏,但它工作正常。然后在更改事件子中添加If flag = true then语句。

Public globalflag as Boolean

Sub test1()

If globalflag = True Then
    BrokenSub 'This sub has an invalid sub/function referenced, but will be ignored if the flag is set to false
Else
    'Don't run the code
    Exit Sub
End If

End Sub

Sub BrokenSub()
invalidfunction ("asb")
End Sub

修改

要将其放入工作表中,只需查看变量是否存在:

在主电子表格的模块中声明:

Public globalflag as Boolean

然后在您的工作表代码中

If not IsEmpty(globalflag) Then
    BrokenSub 'Put your master spreadsheet code here - it'll run if globalflag exists and be ignored if it doesn't
End If

Sub BrokenSub()
invalidfunction ("asb")
End Sub