Access

AccessのVBAを使ってリンクテーブルのリンク元をVBAで変更する方法について覚書。

リンクしているテーブルを持つリンク元ファイルの保存場所が変更になったときなどに一括してリンクテーブルのパスを変更先のパスに書き換える方法。

最近何回か使ったので覚書しておく。

以下にサンプルプログラムを記述。
スポンサードリンク


リンクテーブルのリンク元を変更するVBAのサンプルプログラム

DAOを使用したプログラムなのでDAOオブジェクトライブラリの参照設定を忘れずに。

VBAの画面で、[ツール] - [参照設定]でDAOを指定してください。

リンクテーブルを指定する場合のVBAのサンプルプログラム

任意のリンクテーブルを指定してリンク元を変更する場合のサンプルプログラムを以下に記載します。

Sub Sample01()
Dim db As DAO.Database, tb As DAO.TableDef
  
    Set db = CurrentDb
    Set tb = db.TableDefs("運送会社")
  
    tb.Connect = ";DATABASE=C:\Northwind.mdb;TABLE=運送会社"
    tb.RefreshLink ' リンク情報の更新
  
End Sub

プログラムの注意点

プログラムの注意点としては、Connectプロパティで指定する接続文字列の先頭に";"が入ること。

リンクテーブルをデザインで開いたときの接続文字列では、先頭に";"がついてないの忘れがちですが、VBAで指定する場合は忘れずに。

ちなみにもともとリンクしていたテーブルを変更することはできません。

つまり上の例で言えば、運送会社でリンクしていたテーブルを取引先など他のテーブルに変えることはできない。

リンクテーブルマネージャでもできないんだからVBAでもできるわけない。

リンク元のパスしか変更できないということね。

データベースの全てのリンクテーブルのリンク元を一括で変更するVBAのサンプルプログラム

> "For Each"ステートメントを使ってテーブルオブジェクトを列挙し、全てのリンクテーブルパスを変更するサンプルプログラムを以下に記載します。

1つのファイルからしかリンクしていない場合にリンクテーブルのリンク元を一括して変更することができる。

Sub Sample02()
Dim db As DAO.Database, tb As DAO.TableDef

    Set db = CurrentDb
        'テーブルオブジェクトを列挙
        For Each tb In db.TableDefs
            'リンクテーブルだけを処理
            If tb.Connect <> "" Then
                tb.Connect = ";DATABASE=C:\Northwind.mdb;TABLE=" & tb.Name
                tb.RefreshLink ' リンク情報の更新
            End If
        Next tb
    
End Sub
スポンサードリンク

  

関連記事