目次
外部Accessデータベースの指定テーブルにリンクする
この記事では「外部データベースの指定テーブルにリンクする」ために利用可能な LinkExternalDbTable というユーザー定義関数について紹介します。
この情報が読者のお役に立てば幸いです。
解決できること
Microsoft Access の中でここで紹介する LinkExternalDbTable をマクロの中で呼び出すと %USERPROFILE% からの相対パスで指定された Access の外部データベースの指定テーブルへのリンクを作成することができます。
ここに %USERPROFILE% は Windows であらかじめ定義されている環境変数で Windows PCを使っている利用者のデフォルトのフォルダパスを表しています。この環境変数については必要に応じて以下の記事を参照下さい。
読んでほしい方
こうした Microsoft Access VBA を使ったアプリケーションをこれから作ろうと思っている方、今まで VBA によるアプリケーションを作ってきたが、そのツールを第三者に提供する際に、フォルダの保存パス名等の利用者個人に紐づいた環境差分をVBAのプログラムの中にじかに書くのに抵抗がある方。
LinkExternalDbTable 関数 の紹介
説明
%USERPROFILE% からの相対パスで指定された Access の外部データベース 上のテーブルへのリンクを作成することができます。
参照オブジェクト
この関数を利用するためにはこの関数の実行前に データベースツール > Visual Basic > ツール > 参照設定
の中で
- Microsoft Office 16.0 Access Database engine
にチェックを入れる必要があります。
利用例
Access のマクロ定義例えば “M0000_Call_LinkExternalDbTable” の中で
つまり
If LinkExternalDbTable("Tools\accdb\Make_T0000_東京都コロナ発症状況_マスタ.accdb","T0000_東京都コロナ発症状況_マスタ")=0
If 文の最後
のように LinkExternalDbTableを “Tools\accdb\Make_T0000_東京都コロナ発症状況_マスタ.accdb“、”T0000_東京都コロナ発症状況_マスタ” といったパラメータを付けて呼び出します。
この “M0000_Call_LinkExternalDbTable” のでデザインビューを閉じて、この
“M0000_Call_LinkExternalDbTable” マクロをダブルクリックすると
このマクロが実行されこの中で LinkExternalDbTableが実行されると、ナビゲーションウインドウ上に”T0000_東京都コロナ発症状況_マスタ“へのリンクが現れ、この”T0000_東京都コロナ発症状況_マスタ” を 「開く(O)」 で見ると
のように “T0000_東京都コロナ発症状況_マスタ” テーブルのデータシートビューでこのテーブルの内容が確認可能であることがわかります。
引数
属性 | 意味 | |
---|---|---|
リンクしたいデータベースのファイル名 | 文字型 | %USERPROFILE%からの相対パスでリンクしたいデータベースのファイル名 |
テーブル名 | 文字型 | リンクしたいデータベースのファイル名内のテーブル名 |
戻り値
値 | 意味 |
---|---|
0 | 正常終了 |
1 | 異常終了 |
VBAコード
Function LinkExternalDbTable(external_db_name As String, external_table_name As String) As Integer
Const C_SUCCESS As Integer = 0
Const C_FAILURE As Integer = 1
Dim isTable As Boolean
isTable = False
' 現在のデータベースにテーブルが存在するかチェックします
For Each tbl In CurrentDb.TableDefs
If tbl.Name = external_table_name Then
isTable = True
Exit For
End If
Next
If isTable = True Then
DoCmd.DeleteObject acTable, external_table_name
End If
On Error GoTo exitWithFailure
Dim absoluteExternalDbName As String
absoluteExternalDbName = Environ("UserProfile") & "\" & external_db_name
' テーブルをリンクします
DoCmd.TransferDatabase acLink, "Microsoft Access", absoluteExternalDbName, acTable, external_table_name, external_table_name
Application.RefreshDatabaseWindow
LinkExternalDbTable = C_SUCCESS
Exit Function
exitWithFailure:
LinkExternalDbTable = C_FAILURE
End Function
VBAコードの簡単な説明
行番号 | 説明 |
---|---|
1 | 関数名と関数の戻り値の型(Integer:整数型)、入力パラメータ external_db_name (String:文字列型)、 external_table_name(String:文字列型)の名前、型を定義しています。 |
3-4 | このプログラムの中で利用する定数C_SUCCESS(0:成功)、C_FAILURE(1:失敗)を定義しています。ここでは32行目、36行目ででこの関数の戻り値が C_SUCCESS(0:成功)、C_FAILURE(1:失敗)であることが明確にわかるようなコーディングの仕方になります。 |
6-20 | 入力パラメータ external_db_name で指定されたテーブルが現在のデータベースに存在するかどうかを確認し、もし存在していたら isTable にTrueを設定します。この処理はもし現在既にリンクが存在する場合にこのリンクを削除します。 |
22 | この関数の実行中にエラーが発生したときの例外処理として、exitWithFailure にジャンプします。 |
24-25 |
Environ 関数を利用して利用者の %USERPROFILE% に相当する絶対パス名を取得します。 |
27-28 | DoCmd.TransferDatabase を使ってターゲットとなるデータベースファイル external_db_name 内の external_table_name テーブルへのリンクを作成します。 |
30 | このデータベースのナビゲーションウインドウの表示をリフレッシュし、 external_table_name テーブルを表示する |
32-33 | この関数の戻り値に C_SUCCESS(0:成功) を設定して関数を終わります。 |
35-38 | この関数の戻り値に C_FAILURE (1:失敗) を設定して関数を終わります。 |
まとめ
この記事では「外部データベースの指定テーブルにリンクする」ために利用可能な LinkExternalDbTable というユーザー定義関数について紹介しました。この情報が読者のお役に立てば幸いです。