2013-03-22 140 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 

感謝尼克

塞巴斯蒂安