我们已经在Excel VBA中开发了一个程序。
例如,我们在其中一个函数中遇到了编译器问题(Debug-> Compile VBAProject给出了一些类型不匹配错误)。
无需单击该选项,程序加载后有任何方法,我们可以通过显示“您的测试程序中有编译器错误,请单击Debug-> Compile VBAProject并修复编译器错误”之类的消息来提示用户。 ?
实际问题是,程序(Excel VBA)出现编译器错误,但用户不知道。他只是开始运行该程序,导致失败。
因此,在加载程序后,无需手动单击Debug-> Compile,就可以在excel启动后弹出一个弹出窗口,提示您“出现编译器错误,请执行Debug-> Compile VBAProject并进行修复”。
实际错误是“编译器错误:未定义用户定义的类型”。
作为软件安装的一部分,我们正在客户计算机中安装某些DLL。客户可以将这些DLL添加为参考并编辑其程序。
由于Excel程序出现编译器错误,因此不会调用“ OnProgramLoaded interpose”函数。因此,该函数内部的代码不会执行。用户不知道没有调用此代码。
附加信息:先前我们已选中“按需编译”复选框。因此,即使程序中出现编译器错误,也会调用“ OnProgramLoaded interpose”函数。现在由于不同的原因,我们从“按需编译”中删除了该复选框,所以现在发生的是,由于存在编译器错误,它也没有执行其他功能。
因此,我们想要做的是,一旦程序启动,我们就需要向用户传达该程序存在编译器错误的信息。修复它并重新启动程序。
答案 0 :(得分:0)
您可以检查所需的VBA参考是否已启用:
Private Sub CheckVBAReferences()
Dim dict As Object
Dim oRef As Object
Dim i As Long
Set dict = CreateObject("Scripting.Dictionary")
For Each oRef In ThisWorkbook.vbProject.References
dict.Add oRef.Description & ", " & oRef.fullpath, oRef.GUID
Debug.Print oRef.Description & ", " & oRef.fullpath
Next oRef
If Not dict.Exists("Microsoft Excel 16.0 Object Library, " & _
"C:\Program Files\Microsoft Office\Root\Office16\EXCEL.EXE") Then
MsgBox "Please add a VBA reference to ..."
' or set it according to following link
End If
dict.RemoveAll
Set dict = Nothing
End Sub
然后您可以根据this的答案设置缺少的参考。