【发布时间】:2015-08-10 07:28:02
【问题描述】:
我遇到了“未定义用户定义类型”的问题,但我不想解决它,我想忽略它。
情况:在word文档(.docm)中我使用外部dll(C#,由我创建,我可以控制它)。此 dll 用于改进对文档的控制(导入模型部件/搜索取决于参数/...)。该dll定义了特定的用户类型
当用户单击按钮时调用自定义 dll。它检查 dll 是否已加载。如果没有,它会显示类似“Actions disabled”这样的消息
调用示例:
' This call is from "ThisDocument"
Private Sub planAction_Click()
' If the dll is not load, display warning message
If Not MqDllInstalled Then
Call MsgBox("Actions disabled", vbInformation, "Action unavailable")
Exit Sub
End If
' This function is in a module
Call FuncPlanAction
End Sub
它调用
Public Sub FuncPlanAction()
...
If exist Then
' WordElementType_PlanAction is a "User-Type Defined"
Call GotoTable(WordElementType_PlanAction, Now)
End If
...
End Sub
以及GotoTable的定义
Private Sub GotoTable(ByVal name As WordElementType, ByVal dt As Date)
所以,如果我点击“planAction”按钮,而不是只显示“Actions disabled”消息,它会引发“User Defined Type Not Defined”,因为它会尝试解析 FuncPlanAction。
我想要的:不会引发错误。
为什么不解决:文档必须共享,如果参考不可用我只是禁用高级功能。
我所知道的:
- 问题出在哪里:引用未解决,因此找不到用户定义的类型
- VBA 编译器的工作原理:一旦在其中完成调用,它就会尝试加载模块(如果该模块调用另一个模块,也会发生同样的情况)。因此,在我使用自定义用户类型调用模块之前,不会引发任何“用户类型”。
我尝试过的:
- 我有一个单独的模块“LoadDll”,没有定义用户类型来尝试加载自定义 dll。如果他找不到要加载的 dll/tlb,则加载时不会出现错误。
- 用
On error goto/On error resume next包围来电者(在planAction_Click和FuncPlanAction中) - 将函数放在不同的模块中
有谁知道如何捕捉这个错误?不提高吗?还有其他建议吗?
提前致谢
【问题讨论】:
标签: vba