自动检查“Microsoft ActiveX数据对象x.x库”'来自工具 - >参考

时间:2014-03-31 16:25:19

标签: excel vba

我们与客户共享Excel宏 - MS Access项目。

他们不知道从工具中选择“Microsoft ActiveX Data Objects x.x Library”>引用。

是否有自动更新MS ADO库设置的代码?

注意:在Office中我们使用的是MS 2010.我认为客户的办公室正在使用Micorsoft XP。

3 个答案:

答案 0 :(得分:1)

我建议上面使用后期绑定,但你可以做这样的事情(我的代码完全与PPT 2010中使用的一样,应该很容易适应Access但我从不使用访问权限)。

您可能需要更改ADODBReference常量才能在XP中使用。或者您可以添加另一个常量和逻辑检查,以查看Application.Version并从适当的目标路径加载。

Public Const ADODBReference As String = "C:\Program Files (x86)\Common Files\System\ado\msado15.dll"

Sub PPT_AddRefToADODBLibrary()
'Adds a programmatic reference to ADODB library if one doesn't already exist
'ADODBReference is a public const refers to Microsoft ActiveX Data Objects 6.0 Library

    If Not PPT_RefExists(ADODBReference, "Microsoft ActiveX Data Objects 6.0 Library") Then
        Application.VBE.ActiveVBProject.References.AddFromFile _
            ADODBReference
    Else:
        'Already installed
    End If

End Sub

上面的子调用此自定义函数,该函数首先迭代活动的引用

Function PPT_RefExists(refPath As String, refDescrip As String) As Boolean
'Returns true/false if a specified reference exists, based on LIKE comparison
' to reference.description.
Dim ref As Variant
Dim bExists As Boolean

'Assume the reference doesn't exist
bExists = False

For Each ref In Application.VBE.ActiveVBProject.References
    If ref.Description Like refDescrip Then
        PPT_RefExists = True
        Exit Function
    End If
Next
PPT_RefExists = bExists
End Function

答案 1 :(得分:0)

尝试使用如下代码将其打开:

Application.VBE.ActiveVBProject.References.AddFromFile "C:\Program Files (x86)\Common Files\System\ado\msado15.dll"

您可能会遇到三个问题:已安装,已安装较早版本,文件路径无效。所以我的逻辑如下:

  1. 代码循环遍历所有引用,并检查是否安装了对Microsoft ActiveX Data Objects 6.0 Library的引用。
  2. 如果未安装,则尝试通过错误处理进行安装。
  3. 如果发生故障,则意味着安装了较早的版本(即Microsoft ActiveX Data Objects 2.8)(可以在循环时检查)或文件路径无效。

代码:

Sub AddReferenceMicrosoftActiveXDataObjectsLibrary()
    Const MyRefPath As String = "C:\Program Files (x86)\Common Files\System\ado\msado15.dll"
    Dim ref As Variant
    Dim IsInstalled As Boolean: IsInstalled = False

    For Each ref In Application.VBE.ActiveVBProject.References
        Debug.Print ref.FullPath
        If ref.FullPath = MyRefPath Then IsInstalled = True
    Next

    If IsInstalled = False Then
        On Error GoTo err:
        Application.VBE.ActiveVBProject.References.AddFromFile MyRefPath
        On Error GoTo 0
        Debug.Print "Just installed"
        Exit Sub
    Else
        Debug.Print "Already installed"
    End If  
Exit Sub
err:
    MsgBox "Probably earlier version of Microsoft ActiveX Data Objects is already installed or other error occurred"
End Sub

答案 2 :(得分:-1)

我认为后期绑定是唯一的方法 我为我的办公室制作了一个基于Excel的应用程序,每次我准备新版本时,大约有10%的用户需要访问以添加引用。
我发现,由于这些计算机有不同的Windows版本,对于某些dll,每台计算机上都没有版本。
这使得从代码添加引用更加困难,我不想使用后期绑定 太遗憾了 - 我使用的dll的大多数功能都兼容所有版本。