2013-03-22 139 views
0

我有一个当前正在查询Excel文件的ODBC链接。我现在想要做的是通过工作簿中的每个ODBC连接并更新连接字符串,以便使用不同的路径来查找同名的另一个.xls文件。通过VBA更新ODBC上的excel链接路径

换言之,当前连接字符串作为我看到它在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。我应该改变对象并使用那个?我的印象是,用户不想连接到.xls文件。

任何帮助将不胜感激!

回答

0

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

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

0

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

这里是一个慷慨的MrExcel研究员认为这是工作的罚款(感谢杰里)代码:

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 

感谢尼克

塞巴斯蒂安