【问题标题】:Creating connections to Access database from Excel using VBA使用 VBA 从 Excel 创建到 Access 数据库的连接
【发布时间】:2018-09-13 01:13:20
【问题描述】:

我有一个 Excel 工作簿,其中有多个连接到 Access 数据库中的查询。我希望能够通过 USB 密钥与同事共享此内容,但连接字符串具有到数据库的直接路径,如下所示:

DSN=MS Access Database;DBQ=C:\USERS\Me\Desktop\Database.accdb;DefaultDir=C:\;DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;

据我所知,此处不能使用相对路径。 有没有办法在打开时获取 Excel 文件的当前路径并在 VBA 中创建连接? (数据库文件和 Excel 文件将始终处于相同的相对位置)

【问题讨论】:

    标签: excel vba ms-access connection


    【解决方案1】:

    你可以像这样检索到桌面的路径

    sPath = Environ("USERPROFILE") & "\Desktop"
    

    这意味着您可以在连接字符串中使用以下内容

    sPath & "\Datbase.accdb"
    

    更新 为了使其更健壮,如果数据库文件存在,最好添加一个函数。你可以使用类似于this的函数

    Function fileExists(s_directory As String, s_fileName As String) As Boolean
    
        Dim obj_fso As Object
    
        Set obj_fso = CreateObject("Scripting.FileSystemObject")
        fileExists = obj_fso.fileExists(s_directory & "\" & s_fileName)
    
    End Function
    

    【讨论】:

      【解决方案2】:

      使用这个:

      Path = ActiveWorkbook.Path & "\"
      

      如果您想要代码所在工作簿的路径,请使用:

      Path = ThisWorkbook.Path & "\"
      

      【讨论】:

      • 我认为值得一提的是,这仅适用于 OP 说“数据库文件和 Excel 文件将始终位于相同的相对位置”。
      • @Storax 这正是我认为这是(从概念上)更好的答案的原因。 OP提到在USB记忆棒上传输工作簿+数据库-这让我假设它不会总是从桌面启动。在这方面,您的方法将失败。
      • 是的,没错,从这个角度来看,这是更好的答案。当然,这取决于 OP 的需求。
      • @Storax 当我第一次读到这个问题时,哪个(对我来说)并不完全清楚...... ;)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-24
      相关资源
      最近更新 更多