Access视频课程
网站公告
·Access快速平台QQ群号:84825014    ·Access快速开发平台下载地址及教程    ·欢迎添加微信交流账号:AccessoftChu    ·如何快速搜索本站文章|示例|资料    
您的位置: 首页 > 技术文章 > Access数据库-模块/函数/VBA

优化自动引用ADO、DAO、Excel

时 间:2018-01-17 14:32:37
作 者:KevinFan   ID:47553  城市:东莞
摘 要:由于不同电脑的系统环境(操作系统、Office版本)不一致,需要根据系统环境,在程序打开时自动重新引用ADO、DAO、Excel等
正 文:

由于不同电脑的系统环境(操作系统、Office版本)不一致,需要根据系统环境,在程序打开时自动重新引用ADO、DAO、Excel,之前参考论坛示例,整理了自动引用ADO、DAO、Excel的文章(原文章:http://www.accessoft.com/article-show.asp?id=16886),后来网友@lvxin5635评价说获取Office安装路径的方式更好,今天抽空查阅了论坛的资料,使用获取Office安装目录的方式来判断Excel的引用路径,代码如下(复制黏贴到模块):

Function FileExists(ByVal strFile As String, Optional bFindFolders As Boolean) As Boolean
    Dim lngAttributes As Long
    lngAttributes = (vbReadOnly or vbHidden or vbSystem)

    If bFindFolders Then
        lngAttributes = (lngAttributes or vbDirectory)
    Else
        Do While Right$(strFile, 1) = "\"
            strFile = Left$(strFile, Len(strFile) - 1)
        Loop
    End If

    On Error Resume Next
    FileExists = (Len(Dir(strFile, lngAttributes)) > 0)
End Function

Function FolderExists(strPath As String) As Boolean
    On Error Resume Next
    FolderExists = ((GetAttr(strPath) And vbDirectory) = vbDirectory)
End Function

Public Function ReAddADO()
    On Error Resume Next
    Dim strMDE As String: strMDE = CurrentDb.Properties("MDE")
    If strMDE = "T" Then Exit Function

    Dim REFE As References    '声明REFE为引用
    Dim strFileName As String    '声明strFileName为文本型变量
    Dim rf
    Set REFE = Application.References
    For Each rf In REFE    '在引用中循环查找
        If rf.Name = "ado" Then    '如果名字为ADO就移动ADO的引用
            Application.References.Remove rf    '移除
            Exit For    '退出循环
        End If
    Next

    If FolderExists("C:\Windows\SysWOW64") Then   '如果是64位操作系统
        strFileName = "C:\Program Files (x86)\Common Files\System\ado\msado15.dll"
    Else   '如果是32位操作系统
        strFileName = "C:\Program Files\Common Files\System\ado\msado15.dll"
    End If

    Set rf = Application.References.AddFromFile(strFileName)    '重新引用ADO

End Function

Public Function ReAddDAO()
    On Error Resume Next
    Dim strMDE As String: strMDE = CurrentDb.Properties("MDE")
    If strMDE = "T" Then Exit Function

    Dim REFE As References    '声明REFE为引用
    Dim strFileName As String    '声明strFileName为文本型变量
    Dim rf
    Set REFE = Application.References
    For Each rf In REFE    '在引用中循环查找
        If rf.Name = "DAO" Then    '如果名字为DAO就移动DAO的引用
            Application.References.Remove rf    '移除
            Exit For    '退出循环
        End If
    Next

    If FolderExists("C:\Windows\SysWOW64") Then    '如果是64位操作系统
        strFileName = "C:\Program Files (x86)\Common Files\microsoft shared\DAO\dao360.dll"
    Else   '如果是32位操作系统
        strFileName = "C:\Program Files\Common Files\Microsoft Shared\DAO\dao360.dll"
    End If

    Set rf = Application.References.AddFromFile(strFileName)    '重新引用DAO

End Function

Public Function ReAddExcel()
    On Error Resume Next
    Dim strMDE As String: strMDE = CurrentDb.Properties("MDE")
    If strMDE = "T" Then Exit Function

    Dim REFE As References    '声明REFE为引用
    Dim strFileName As String    '声明strFileName为文本型变量
    Dim rf
    Set REFE = Application.References
    For Each rf In REFE    '在引用中循环查找
        If rf.Name = "Excel" Then    '如果名字为Excel就移动Excel的引用
            Application.References.Remove rf    '移除
            Exit For    '退出循环
        End If
    Next

    strFileName = SysCmd(acSysCmdAccessDir) & "EXCEL.EXE"   '获取Access安装目录,也就是Office安装目录
    Debug.Print strFileName
    Set rf = Application.References.AddFromFile(strFileName)    '自动引用Excel

End Function



Access软件网QQ交流群 (群号:323388798)       access源码网店

最新评论 查看更多评论(2)

2020/9/16 22:20:59林绣慈
感谢分享!

2018/4/10 20:07:59nowtoo
感谢分享!

发表评论您的评论将提升作者分享的动力!快来评论一下吧!

用户名:
密 码:
内 容:
 

常见问答

技术分类

相关资源

关于我们 | 服务条款 | 在线投稿 | 友情链接 | 网站统计 | 网站帮助