我有一个使用某种类型的工作簿,我们称之为T,这是在我的参考文献中定义的模块(DLL)中 - 一切都很好。
我创建了一些在Workbook_Open()中调用的代码,如果它不在引用列表中,它将添加对DLL的引用。这样我就可以将工作簿交给某人,他们不必手工处理创建引用。
我的问题是,当我打开工作簿(双击),在执行Workbook_Open()之前(并且可以设置Refence),我会被抛入调试器,指向并抱怨类型为T,在未定义的DLL尚未定义。好吧,不开玩笑不是。
这似乎是一个小鸡蛋。有人见过这个吗?你是怎么解决的?
答案 0 :(得分:1)
就像其他人说的那样,如果你不想在Workbook_Open
之前添加对DLL的引用,你必须使用后期绑定来连接到DLL中的东西。
但是,我认为你这样做是错误的。不要在Workbook_Open
中添加对DLL的引用,而是已经引用它并检查.IsBroken
。然后,您可以使用代码来执行修复损坏的引用所需的操作。
这样可以保留早期绑定的好处,如果对DLL的引用被破坏,您将不会遇到相同类型的编译错误。
注意:您仍然可以获得编译错误,但它们不会用于丢失的DLL。虽然您的引用已损坏,但如果函数未以Strings
开头,则VBA Strings.
模块中的任何函数的使用都将触发编译错误。例如,以下代码将导致编译器错误如果您有任何损坏的引用,Workbook_Open
会运行。
Private Sub Workbook_Open()
Dim r As Reference
For Each r In ThisWorkbook.VBProject.References
If r.IsBroken Then
MsgBox "Found broken reference." & vbCrLf _
& Mid(r.FullPath, InStrRev(r.FullPath, "\") + 1)
End If
Next r
End Sub
要修复此问题,请在Mid
前加上InStrRev
和Strings.
。
MsgBox "Found broken reference." & vbCrLf _
& Strings.Mid(r.FullPath, Strings.InStrRev(r.FullPath, "\") + 1)