问题源于:在是EXCEL中引用一个DLL[VBAPrj]
待解决问题:当不存在所需要的引用[VBAPrj]时,提示“所需要的引用[VBAPrj]不存在!”
================================================================================
EXCEL中的宏:
Sub ErrorTest()
On Error GoTo errHand
Dim a As New VBACls \当我把EXCEL中所需要的引用[VBAPrj]去掉时,这里提示用户定义类型未定义,不会转到错误处理行。
a.test
Exit Sub
errHand:
MsgBox ("所需要的引用不存在!")
End Sub===================================================================================================
有没办法实现:当不存在所需要的引用[VBAPrj]时,提示“所需要的引用[VBAPrj]不存在!”,即转到errHand行?

解决方案 »

  1.   

    VBA和VB有些不同,想修改难度很大。
      

  2.   

    可以用后期绑定来捕获错误:
    Sub ErrorTest()
        Dim a As Object
        On Error GoTo errHand
        Set a = CreateObject("VBACls")
        a.test
        Exit Sub
    errHand:
        MsgBox ("所需要的引用不存在!")
    End Sub
      

  3.   

    上面的没对,我删不了。
    当前所有引用的列表:
    Sub ShowRefs()
      Dim rf
      For Each rf In ThisWorkbook.VBProject.References
        Debug.Print rf.Name, rf.FullPath
      Next
    End Sub
      

  4.   

    '可以直接添加引用,然后来判断。代码如下
    Sub ErrorTest()
        Dim a As Object
        On Error Resume Next
        Set a = CreateObject("VBAPrj.VBACls")
        If a Is Nothing Then
            ThisWorkbook.VBProject.References.AddFromFile ("c:\VBAPrj.dll")
        End If
        Set a = CreateObject("VBAPrj.VBACls")
        If a Is Nothing Then GoTo errHand
        a.test
        Exit Sub
    errHand:
        MsgBox ("所需要的引用不存在!")
    End Sub
      

  5.   

    上面代码中应将第二个set语句移到if判断语句中。
      

  6.   

    即写成如下形式:
    Sub ErrorTest()
        Dim a As Object
        On Error Resume Next
        Set a = CreateObject("VBAPrj.VBACls")
        If a Is Nothing Then
            ThisWorkbook.VBProject.References.AddFromFile ("c:\VBAPrj.dll")
            Set a = CreateObject("VBAPrj.VBACls")
        End If
        If a Is Nothing Then GoTo errHand
        a.test
        Exit Sub
    errHand:
        MsgBox ("所需要的引用不存在!")
    End Sub