【问题标题】:Updating paths on ODBC excel links through VBA通过 VBA 更新 ODBC excel 链接上的路径
【发布时间】:2013-03-22 00:15:31
【问题描述】:

我不久前创建了一个当前 ODBC 链接,用于查询 Excel 文件。我现在想做的是通过工作簿中的每个 ODBC 连接并更新连接字符串,以便它使用另一个相同名称的 .xls 文件所在的路径。

换句话说,我在 Excel 中看到的当前连接字符串(数据>连接>连接>1stConn 属性>定义选项卡>连接字符串)如下:

DSN=Excel Files;DBQ=C:\TEST\CurrentQuarter.xls;DefaultDir=C:\TEST;DriverId=1046;MaxBufferSize=2048;PageTimeout=5;

我希望将其更改为:

DSN=Excel Files;DBQ=C:\OTHERTEST\CurrentQuarter.xls;DefaultDir=C:\OTHERTEST;DriverId=1046;MaxBufferSize=2048;PageTimeout=5;

我试过这段代码:

Sub SwitchODBCSource()
    Dim conn As WorkbookConnection

    For Each conn In ActiveWorkbook.Connections

        With conn
            'I have tried without succes the following 2 properties, without any luck:
            .CommandText = "DSN=Excel Files;DBQ=C:\OTHERTEST\CurrentQuarter.xls;DefaultDir=C:\OTHERTEST;DriverId=1046;MaxBufferSize=2048;PageTimeout=5;"
            .Connection = "DSN=Excel Files;DBQ=C:\OTHERTEST\CurrentQuarter.xls;DefaultDir=C:\OTHERTEST;DriverId=1046;MaxBufferSize=2048;PageTimeout=5;"

        End With
    Next conn

    Set conn = Nothing

End Sub

我是否在 Connection(.CommandText 或 .Connection)上使用了适当的方法?我感觉我不是,因为 VBA 向我抛出错误“对象不支持此属性或方法”

在这种情况下,使用的对象是 QueryTable。我应该更改 Object 并使用那个吗?我的印象是该用户不想连接到 .xls 文件..

任何帮助将不胜感激!

【问题讨论】:

    标签: excel odbc connection-string vba


    【解决方案1】:

    尝试conn.ODBCConnectionconn.OLEDBConnection,因为它们确实具有.commandtext.connection 属性。

    我不知道这是否允许您更改它们。我原以为您需要删除然后使用新的连接字符串重新创建连接。

    【讨论】:

      【解决方案2】:

      你是对的:conn.ODBCConnection.Connection 是要走的路。它让我用 VBA 改变它!惊人的。

      这是一位慷慨的 MrExcel 研究员建议的运行良好的代码(感谢 Jerry):

      Sub SwitchODBCSource()
      Dim conn As WorkbookConnection
      Dim sOldConnection As String, sNewConnection As String
      
      Const sOldPath As String = "C:\TEST" '--omit trailing backslashes to change DefaultDir
      Const sNewPath As String = "C:\OTHERTEST"
      
      For Each conn In ActiveWorkbook.Connections
          With conn
              If .Type = xlConnectionTypeODBC Then
                  sOldConnection = .ODBCConnection.Connection
                  If InStr(1, sOldConnection, sOldPath) > 0 Then
                      sNewConnection = Replace(sOldConnection, _
                              sOldPath, sNewPath, Compare:=vbTextCompare)
                      .ODBCConnection.Connection = sNewConnection
                      .Refresh '--optional to refresh now
                  End If
              End If
            End With
      Next conn
      
      Set conn = Nothing
      
      End Sub
      

      谢谢尼克

      塞巴斯蒂安

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多