如何查找是否由于缺少DLL参考而存在任何编译错误?

时间:2019-07-18 05:30:37

标签: excel vba

我们已经在Excel VBA中开发了一个程序。

例如,我们在其中一个函数中遇到了编译器问题(Debug-> Compile VBAProject给出了一些类型不匹配错误)。

无需单击该选项,程序加载后有任何方法,我们可以通过显示“您的测试程序中有编译器错误,请单击Debug-> Compile VBAProject并修复编译器错误”之类的消息来提示用户。 ?

实际问题是,程序(Excel VBA)出现编译器错误,但用户不知道。他只是开始运行该程序,导致失败。
因此,在加载程序后,无需手动单击Debug-> Compile,就可以在excel启动后弹出一个弹出窗口,提示您“出现编译器错误,请执行Debug-> Compile VBAProject并进行修复”。

实际错误是“编译器错误:未定义用户定义的类型”。
作为软件安装的一部分,我们正在客户计算机中安装某些DLL。客户可以将这些DLL添加为参考并编辑其程序。
由于Excel程序出现编译器错误,因此不会调用“ OnProgramLoaded interpose”函数。因此,该函数内部的代码不会执行。用户不知道没有调用此代码。
附加信息:先前我们已选中“按需编译”复选框。因此,即使程序中出现编译器错误,也会调用“ OnProgramLoaded interpose”函数。现在由于不同的原因,我们从“按需编译”中删除了该复选框,所以现在发生的是,由于存在编译器错误,它也没有执行其他功能。

因此,我们想要做的是,一旦程序启动,我们就需要向用户传达该程序存在编译器错误的信息。修复它并重新启动程序。

1 个答案:

答案 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的答案设置缺少的参考。