VBAのプログラムが記述された自分自身のデータベース内にあるリンクテーブルではなく、他の外部のデータベースファイル内にあるすべてのリンクテーブルについて、しかも複数のデータベースファイルに対して一括してリンク先を切り替えるプログラム例です。

下記の例では、「C:\テスト\」フォルダ内にある3つのデータベースファイルについて、その中のすべてのリンクテーブルのリンク先を「C:\テスト\NewLinkDB.accdb」に切り替えています。
またその際、”3つのデータベースファイル”についてはあらかじめ配列に列挙しています。もしもっとたくさんのデータベースファイルを対象とするのであれば、配列内にその名前を追記します。またもしそれらのデータベースファイルがそれぞれ異なるフォルダにある場合には、共通の「cstrDir」定数として宣言しているパスの文字列も配列内へのそれぞれ異なる記述に書き換えることで対処できます。
Public Sub ReLinkExtDB()
Dim dbs As Database
Dim tdf As TableDef
Dim avarDatabases As Variant
Dim iintLoop As Integer
Const cstrDir = "C:\テスト\"
Const cstrDataDB = "C:\テスト\NewLinkDB.accdb"
avarDatabases = Array("サンプル1.accdb", "サンプル2.accdb", "サンプル3.accdb")
'3つの外部のデータベースファイルのループ
For iintLoop = 0 To UBound(avarDatabases)
'1つのデータベースを開く
Set dbs = OpenDatabase(cstrDir & avarDatabases(iintLoop))
'全テーブルの探索ループ
For Each tdf In dbs.TableDefs
With tdf
If .Attributes And dbAttachedTable Then
'リンテーブルのみリンク先設定の処理
.Connect = ";DATABASE=" & cstrDataDB
.RefreshLink
End If
End With
Next tdf
dbs.Close: Set dbs = Nothing
Next iintLoop
End Sub
実行例:
- 実行前

- 実行後
|