【連載】#30 Access VBA を使い 他の Access 内テーブルをリンクしよう

【連載】#30 Access VBA を使い 他の Access 内テーブルをリンクしよう
【連載】#29 他のAccess ファイルからクエリ操作をインポートし再利用しよう

【連載】#30 Access VBA を使い 他の Access 内テーブルをリンクしよう
しらかば堂

いつも記事を読んで頂きありがとうございます~
今日の調子はいかがですか?

本記事では Access ツール 18_02.accdb を修正し、他の Access ファイル内にあるテーブルへのリンク方式を 記事#17 で紹介した リボンメニューから新しいデータソースを絶対パス名で外部参照してリンクする方式 から しらかば堂の Access VBA 関数ライブラリ LinkExternalDbTable  を利用して マクロの中で対象ファイルを相対パス名で外部参照してリンクする方式 に変更するやり方について紹介します。

リファクタリング方針を再確認する

さて 記事#25

【連載】#25 バッチファイル や Access ツールをリファクタリングしよう

では これまでに作成したバッチファイル、 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 から不要な警告ダイアログを抑制する方法

についてこの順番で紹介します。

【連載】#30 Access VBA を使い 他の Access 内テーブルをリンクしよう

Access VBA を使い他Accessファイル内テーブルへのリンクを作成しよう

何故 Access VBA を使ってリンクを作成するのか

まず以下の図はリファクタリング(改善)前の18_02.accdbT0000_東京都コロナ発症状況_マスタ テーブルへの外部リンク上でマウスの右ボタンクリックして現れるコンテキストメニューから リンクテーブルマネージャ(K) を選択しているところです。

【連載】#30 Access VBA を使い 他の Access 内テーブルをリンクしよう
しらかば堂

外部リンクにはテーブルアイコンの左側に
→矢印がついてますね

【連載】#30 Access VBA を使い 他の Access 内テーブルをリンクしよう
18_02.accdb
T0000_東京都コロナ発症状況_マスタ テーブルへのリンク情報

リンクテーブルマネージャ(K) を選択して起動すると以下のような画面が現れます。

【連載】#30 Access VBA を使い 他の Access 内テーブルをリンクしよう
18_02.accdb
T0000_東京都コロナ発症状況_マスタ テーブルに対するリンクテーブルマネージャ画面

このリンク情報は 記事#17 の中で手動操作を行い、参照したい別 Access ツールのファイル名をダイアログ画面から直接選択しそのファイルの絶対パス

C:\Users\devel\Documents\Desktop\16_01.accdb

を直接指定して設定しているわけですが、このやり方だとこういったツールを社内のグループ内で横展開しようと思った場合に、展開するユーザーごとにこの操作を実施してもらう必要があるため、ツールの横展開の障壁の1つになる可能性があります。

従って展開する相手のPCに

【Windows業務効率化】バッチファイルでツールのフォルダ環境を自動生成しよう

で紹介したバッチツールで標準的なツール用のフォルダ環境を作成してもらい、続いてこのリンク情報を VBA を利用したマクロの中で各ユーザーのPCの %USERPROFILE% からの相対パス名で指定することでこの障壁をなくそうという訳です。

この %USERPROFILE% については必要に応じて

【Windows業務効率化】バッチファイルの基本テクニックを知ろう

も参照して下さい。

関数ライブラリLinkExternalDbTable の組み込み方

このしらかば堂の Access VBA 関数ライブラリ LinkExternalDbTable を Access  に組み込む際は 

リボンメニューの

データベースツール > Visual Basic

を順にクリックして VBE(Visual Basic Editor) を起動し

【連載】#30 Access VBA を使い 他の Access 内テーブルをリンクしよう

VBE のメニューから
挿入(I) > 標準モジュール(M)

を順にクリックして標準モジュールを挿入し

【連載】#30 Access VBA を使い 他の Access 内テーブルをリンクしよう

現れたコードウインドウに

【Access VBA】外部Accessデータベースの指定テーブルにリンクする

から VBAコードをコピーし、VBEのコードウインドウにペーストし、さらにオブジェクトの参照設定で以下のような EnjoyTech 等の参照設定を行ってVBEを閉じ

【連載】#30 Access VBA を使い 他の Access 内テーブルをリンクしよう
VBA の参照設定

次に紹介する M0000_Call_LinkExternalDbTable マクロからこの関数を呼び出することでこのLinkExternalDbTable 関数を組み込みます。

M0000_Call_LinkExternalDbTable マクロ の作り方

では実際にこの LinkExternalDbTable 関数を呼び出すための M0000_Call_LinkExternalDbTable マクロを作成しましょう。

【連載】#30 Access VBA を使い 他の Access 内テーブルをリンクしよう

ここではマクロビルダを使って 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 マクロです。

【連載】#30 Access VBA を使い 他の Access 内テーブルをリンクしよう
変更前 18_02.accdb の autoexec マクロ

この中の赤枠で囲まれた部分は 記事#22 の中でユーザーが処理の終了タイミングを知るために追加したダイアログなのですが、個別のツール毎に終了ダイアログをポップアップすると、結果的にユーザーがPCの前に張り付いて各ダイアログのポップアップ後に OK ボタンをクリックする必要があり自動化の効果を薄めてしまうことがわかったのでこれを削除します。

具体的にはこの autoexec マクロをマクロビルダで開き、この メッセージボックスアクション の右にマウスを移動し、現れる × アイコンをクリックしてこのアクションを削除します。

また先ほど紹介した M0000_Call_LinkExternalDbTable マクロの実行アクション、 次回 記事#31 で紹介する M1010_Call_ExportTableToBook マクロの実行アクションを加えた最終的な autoexec マクロを以下のようにします。

【連載】#30 Access VBA を使い 他の Access 内テーブルをリンクしよう
変更後の 18_02.accdb 改め 作成_T1040_日付_退院者数_入院者数_退院率_xlsx.accdb の 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 による相対パス指定に変更します。

       

      さてこの記事全体の目標は

      •  今の状況から抜け出してもっと前向きな仕事に取り組みたい
      • さっさと仕事を切り上げて充実したアフターファイブを過ごしたい

      でしたよね。

      あなたの解決したい問題は何ですか?
      次回はまた

      【連載】#31 Access VBA を使い テーブルをExcelブックにエクスポートしよう

      で Access VBA の新しい窓を開きましょう。


      Microsoft Access 関連教材は次のリンクからどうぞ。

      Access VBA 関連教材の紹介