本記事では Access ツール 18_02.accdb を修正し、他の Access ファイル内にあるテーブルへのリンク方式を 記事#17 で紹介した リボンメニューから新しいデータソースを絶対パス名で外部参照してリンクする方式 から しらかば堂の Access VBA 関数ライブラリ LinkExternalDbTable を利用して マクロの中で対象ファイルを相対パス名で外部参照してリンクする方式 に変更するやり方について紹介します。
目次
リファクタリング方針を再確認する
さて 記事#25
では これまでに作成したバッチファイル、 Access ツールの課題を抽出し、リファクタリング(改善)方針をご紹介していますが、この中から Access ツール 18_02.accdb に注目してリファクタリング(改善)方針を集めると以下のようになります。
項番 | 解決したい課題 | リファクタリング(改善)方針 |
---|---|---|
2 | デスクトップの整理とツールの名称変更 | デスクトップ上に配置されているツールを以下のフォルダに移動し名称変更します。 |
5 | 18_02.accdb ⇒ %USERPROFILE%\Tools\accdb\作成_T1040_日付_退院者数_入院者数_退院率_xlsx.accdb |
|
9 | 不要な警告ダイアログの抑制 | 18_02.accdb から T1040_日付_退院者数_入院者数_退院率.xlsx が作成された メッセージダイアログの出力を削除します。 |
12 | ツールからの絶対パス情報を相対パス情報に変更 | 18_02.accdb の 16_01.accdb 内 T0000_東京都コロナ発症状況_マスタ テーブルへのリンク処理を しらかば堂のユーザー定義関数(VBA) LinkExternalDbTable による相対パス指定に変更します。 |
13 | 18_02.accdb の T1040_日付_退院者数_入院者数_退院率 テーブルの T1040_日付_退院者数_入院者数_退院率.xlsx への エクスポート処理を しらかば堂のユーザー定義関数(VBA) ExportTableToBook による相対パス指定に変更します。 |
本記事ではこのリファクタリング(改善)方針のうち内容が自明な 項番2、項番5、次の 記事#31 で紹介予定の項番13を除いて、項番12、項番9 のリファクタリング項目、つまり
- 18_02.accdb から 作成T0000東京都コロナ発症状況_マスタ.accdb の T0000_東京都コロナ発症状況_マスタ テーブルへのリンクを記事#17 で紹介した リボンメニューから新しいデータソースを絶対パス名で外部参照してリンクする方式 からしらかば堂の Access VBA 関数ライブラリ LinkExternalDbTable を利用して マクロの中で対象ファイルを相対パス名で外部参照してリンクする方式 に変更する方法
- 18_02.accdb から不要な警告ダイアログを抑制する方法
についてこの順番で紹介します。
Access VBA を使い他Accessファイル内テーブルへのリンクを作成しよう
何故 Access VBA を使ってリンクを作成するのか
まず以下の図はリファクタリング(改善)前の18_02.accdb の T0000_東京都コロナ発症状況_マスタ テーブルへの外部リンク上でマウスの右ボタンクリックして現れるコンテキストメニューから リンクテーブルマネージャ(K) を選択しているところです。
外部リンクにはテーブルアイコンの左側に
→矢印がついてますね
リンクテーブルマネージャ(K) を選択して起動すると以下のような画面が現れます。
このリンク情報は 記事#17 の中で手動操作を行い、参照したい別 Access ツールのファイル名をダイアログ画面から直接選択しそのファイルの絶対パス
C:\Users\devel\Documents\Desktop\16_01.accdb
を直接指定して設定しているわけですが、このやり方だとこういったツールを社内のグループ内で横展開しようと思った場合に、展開するユーザーごとにこの操作を実施してもらう必要があるため、ツールの横展開の障壁の1つになる可能性があります。
従って展開する相手のPCに
で紹介したバッチツールで標準的なツール用のフォルダ環境を作成してもらい、続いてこのリンク情報を VBA を利用したマクロの中で各ユーザーのPCの %USERPROFILE% からの相対パス名で指定することでこの障壁をなくそうという訳です。
この %USERPROFILE% については必要に応じて
も参照して下さい。
関数ライブラリLinkExternalDbTable の組み込み方
このしらかば堂の Access VBA 関数ライブラリ LinkExternalDbTable を Access に組み込む際は
リボンメニューの
データベースツール > Visual Basic
を順にクリックして VBE(Visual Basic Editor) を起動し
VBE のメニューから
挿入(I) > 標準モジュール(M)
を順にクリックして標準モジュールを挿入し
現れたコードウインドウに
から VBAコードをコピーし、VBEのコードウインドウにペーストし、さらにオブジェクトの参照設定で以下のような EnjoyTech 等の参照設定を行ってVBEを閉じ
次に紹介する M0000_Call_LinkExternalDbTable マクロからこの関数を呼び出することでこのLinkExternalDbTable 関数を組み込みます。
M0000_Call_LinkExternalDbTable マクロ の作り方
では実際にこの LinkExternalDbTable 関数を呼び出すための M0000_Call_LinkExternalDbTable マクロを作成しましょう。
ここではマクロビルダを使って M0000_Call_LinkExternalDbTable マクロの中に次のようなアクションを記述します。
If LinkExternalDbTable("Tools\accdb\作成_T0000_東京都コロナ発症状況_マスタ.accdb","T0000_東京都コロナ発症状況_マスタ")=0
If文の最後
このM0000_Call_LinkExternalDbTable マクロが LinkExternalDbTable を呼び出すためのパラメータは以下のとおりです。
パラメータ番号 | 記述されたパラメータ値 | 説明 |
---|---|---|
1 | “Tools\accdb\作成_T0000_東京都コロナ発症状況_マスタ.accdb“ | リンクしたい Access ツールのフォルダ名を %USERPROFILE% からの相対パス名で記述します。 |
2 | “T0000_東京都コロナ発症状況_マスタ“ | リンクしたい Access ツール内の参照したいテーブルの名前を記述します。 |
作成済のツールから不要な警告ダイアログを削除しよう
次に作成済のツールから不要な警告ダイアログを削除する方法について紹介しましょう。下記は改善前の 18_02.accdb の autoexec マクロです。
この中の赤枠で囲まれた部分は 記事#22 の中でユーザーが処理の終了タイミングを知るために追加したダイアログなのですが、個別のツール毎に終了ダイアログをポップアップすると、結果的にユーザーがPCの前に張り付いて各ダイアログのポップアップ後に OK ボタンをクリックする必要があり自動化の効果を薄めてしまうことがわかったのでこれを削除します。
具体的にはこの autoexec マクロをマクロビルダで開き、この メッセージボックスアクション の右にマウスを移動し、現れる × アイコンをクリックしてこのアクションを削除します。
また先ほど紹介した M0000_Call_LinkExternalDbTable マクロの実行アクション、 次回 記事#31 で紹介する M1010_Call_ExportTableToBook マクロの実行アクションを加えた最終的な autoexec マクロを以下のようにします。
まとめ
いかがでしたか?
本記事では 記事#25 でご紹介したリファクタリング方針に基づき
- 18_02.accdb から 作成T0000東京都コロナ発症状況_マスタ.accdb の T0000_東京都コロナ発症状況_マスタ テーブルへのリンクを記事#17 で紹介した リボンメニューから対象ファイルを絶対パス名で外部参照してリンクする方式 からしらかば堂の Access VBA 関数ライブラリ LinkExternalDbTable を利用して マクロの中で対象ファイルを相対パス名で外部参照してリンクする 方式に変更する方法
- 18_02.accdb から不要な警告ダイアログを抑制する方法
について順に紹介しました。
次の記事では 18_02.accdb に対する残りのリファクタリング(改善)のやり方について具体的に紹介します。
項番 | 解決したい課題 | リファクタリングの方針 |
---|---|---|
13 |
ツールからの絶対パス情報を相対パス情報に変更 |
18_02.accdb の T1040_日付_退院者数_入院者数_退院率 テーブルの T1040_日付_退院者数_入院者数_退院率.xlsx への エクスポート処理を しらかば堂のユーザー定義関数(VBA) ExportTableToBook による相対パス指定に変更します。 |
さてこの記事全体の目標は
- 今の状況から抜け出してもっと前向きな仕事に取り組みたい
- さっさと仕事を切り上げて充実したアフターファイブを過ごしたい
でしたよね。
あなたの解決したい問題は何ですか?
次回はまた
で Access VBA の新しい窓を開きましょう。
Microsoft Access 関連教材は次のリンクからどうぞ。
いつも記事を読んで頂きありがとうございます~
今日の調子はいかがですか?