通过VBA更新ODBC excel链接上的路径

时间:2013-03-22 00:15:32

标签: excel-vba odbc connection-string vba excel

我有一个当前的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抛出一个错误“对象不支持这个属性或方法”

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

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:0)

尝试conn.ODBCConnectionconn.OLEDBConnection,因为他们拥有.commandtext.connection属性。

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

答案 1 :(得分:0)

你是对的: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

谢谢尼克

的Sebastien