himorogiの日記

主にプログラミングに関することなど。少々ハード(電子工作)についても。

前口上

MS Access ではマクロでちょっとしたことをやろうとするとすぐに制約にぶつかって、VBA を使わないと目的が果たせないことが多い。
どうもマクロで完結することはあんまり考えておらず、VBA へ誘うための導入編の扱いではないかと勘繰ってしまう。

しかしいまさら VBA を一般人に習得させるのは利口とは思えない。今勤めている一部上場(ただし持株会社の方)では、IT業界ということもあって VBA 使えて当たり前な雰囲気だけど、自分がこれからベンチャー起こすとか個人企業でスタートしようというときに高い Office Pro なんか選べない。Google Doc や Google Apps で済ませるのは当然。だとすると基本は JavascriptJavaPython だ。PHPVBA 以上にありえない。

定年もそう遠くはない雌伏の今、VBA なんぞに無駄な時間割いてる余裕はないので、MS Access の仕事を依頼されたらクエリとマクロでお茶を濁そうと思う。
そのためにマクロのさまざまな制約を取っ払うためのユーザー関数を予め VBA で作っておくのが、前回の記事と今回の記事(と、もし続きがあったら次回も)の狙い。嫌なことは一回で済ませ、何度も繰り返さない。

というわけで今回のネタについてなのだが MS Access のマクロで、他の Access のテーブルや Excel のワークシートをインポート|エクスポート|リンクするときには"データベース変換"アクションを使うのだけど、これはパラメータとして渡されたファイルパスやテーブル名を式として評価しない。つまり、パラメータ欄でユーザー関数やフォームのコントロールの値を参照するようなやり方ができない。ファイルパスやテーブル名はそのまま決め打ちするしかない。

MS Access をツールとして使うとき、読み込ませるファイル名を事前に固定化すればそういう使い方は有りだろうけど、フルパス固定だと実行環境が変わる度にパラメータの書き換えが必要になる。それは簡便してくれ、と利用者サイドがブーたれてくるのは目に見える。

前回はマクロからファイル選択ダイアログが使えるようにユーザー関数を作ってみた。今回は、取得したファイルパスを使って Access のテーブルや Excel のワークシートを読み書きする手段を提供しよう。