0

しばらく前に作成された現在の 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ファイルに接続したくないという印象を受けました..

どんな助けでも大歓迎です!

4

2 に答える 2

0

conn.ODBCConnectionorconn.OLEDBConnectionを試してみてください。 .commandtextandの.connectionプロパティがあります。

ただし、これで変更できるかどうかはわかりません。新しい接続文字列を使用して、接続を削除してから再作成する必要があると思いました。

于 2013-03-22T03:07:46.443 に答える
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

ありがとうニック

セバスチャン

于 2013-03-22T13:58:51.760 に答える