Accessでリンクテーブルの接続先を一括変更するには


Microsoft Access のお問い合わせで圧倒的に多いのは、PCやファイルサーバをリプレースしたら動かなくなった!というもの。
PCなら4年、サーバなら5年。これが税制上定められている減価償却期間(法定耐用年数)なので、この周期で必ずやってくるのだ。

そして今回は、『パス 'フルパス文字列' は正しくありません。パス名に間違いがないことと、ファイルが置かれたサーバーに接続していることを確認してください。』というエラーメッセージで停止している。
Windowsのコンピュータ名(ホスト名)が変更されたことに因る影響だ。

VBAに明るいユーザーならここでVBEを起動し、エラーの原因となったフルパス文字列の全検索を試みるのだが、それでも見つからないので、一体どこで定義しているの!?と途方に暮れることになる。

このエラーメッセージで先ず疑うのはリンクテーブルの接続先。
次の操作で、データソースが古いパス名を指していないかチェックしてみよう。


  1. [外部データ] [リンクテーブルマネージャー] の順にクリック。

  2. リンクテーブルマネージャーで、該当するデータソースを選択し、[編集] をクリック。

  3. データソースのパスを書き替えて [保存] をクリック。すべて修正したら最後に [更新] を実行。


リンクテーブルを多用している場合、いちいち手で直してられないので、マクロで一括変換してしまおう。

Sub データソースパス一括変更()
    Dim td As DAO.TableDef
    Dim sBefore As String, sAfter As String
    Dim sFrom As String, sTo As String

    sFrom = "uksrv01w"  '検索する文字列
    sTo = "uksrv02w"    '置換する文字列

    For Each td In CurrentDb.TableDefs   'すべてのテーブルで
        If td.Attributes And dbAttachedTable Then   'リンクテーブルなら
            sBefore = td.Connect   '接続文字列を取得
            sAfter = Replace(sBefore, sFrom, sTo)
            If sBefore <> sAfter Then   '置換されていたら
                td.Connect = sAfter
                td.RefreshLink   'リンクを更新
                Debug.Print sBefore & " ==> " & sAfter
            End If
        End If
    Next
End Sub

言うまでもないが、実行前に必ずバックアップを取っておくこと。
複雑な置換には正規表現で対処しても良いだろう。