拡張子 .orz のデータファイルをダブルクリックすると、特定 MDB を起動させて、そのデータファイルを処理させたい。方法としては、拡張子の関連付けで、特定 MDB を起動させます。
拡張子 .orz は既存の拡張子とカブっていない、また特定 MDB のパスは固定であるものとします。
またその際に、ダブルクリックされたファイルのフルパスを cmd スイッチに渡すようにします。cmd スイッチに渡された値は、VBA で Command 関数経由で参照できます。
Access のコマンド ライン スイッチ - Access - Microsoft Office
Command 関数 - Access - Microsoft Office
以下、詳細。
まず db1.mdb の標準モジュールに、以下のようなプロシージャを用意しておきます。
Public Function Proc1() Dim dataFile As String dataFile = Command$() ' ここにデータファイルを処理するコードを記述する。 ' ここではテストのため、メッセージボックスに表示する。 MsgBox dataFile End Function
次に、以下のようなマクロを作成します。
拡張子の関連付けで、このマクロを呼び出すように指定します。
拡張子の関連付けを手動で行う場合は、以下のような手順になります (Windows XP の場合です)。
- Windows エクスプローラを起動し、[ツール]-[フォルダ オプション...] を選択します。
- [フォルダ オプション] ダイアログが開くので、[ファイルの種類] タブに切り替えて [新規] ボタンをクリックします。
- [新しい拡張子の作成] ダイアログが開くので、[ファイルの拡張子] 欄に登録したい拡張子を入力して [OK] をクリックします。
- [フォルダ オプション] ダイアログに戻ります。登録した拡張子が選択されている状態であることを確認し、[詳細設定] ボタンをクリックします。
- [ファイルの種類の編集] ダイアログが開きます。[新規] ボタンをクリックします。
- [アクションの編集] ダイアログが開くので、以下の内容を入力します。
アクション 開く(&O) アクションを実行するアプリケーション "C:\Program Files\Microsoft Office\OFFICE11\MSACCESS.EXE" /NOSTARTUP "C:\temp\test.mdb" /xマクロ1 /cmd"%1" DDE を使う チェックオン DDE メッセージ [SetForeground][ShellOpenDatabase "C:\temp\test.mdb"] アプリケーション Msaccess DDE アプリケーションが実行していないとき [SHELLNOOP] トピック ShellSystem ※ 赤字部分は、実際の値に読み替えてください。
- [OK] ボタンを 3 回クリックしてすべてのダイアログを閉じます。
以上で終わりです。
上の例では、拡張子 .orz のデータファイルをダブルクリックすると "C:\temp\test.mdb" が起動し、データファイルのパスが表示されます。
DDE の設定は、多重起動を防ぐためのものです。上の例では、すでに "C:\temp\test.mdb" が開いている状態で再度 呼び出されると、既存のウィンドウをアクティブにする動作になります。DDE をオフにすると、多重起動します。どちらがよいかは状況に応じて選ぶと良いでしょう。
起動スイッチでマクロを指定していますが、MDB 側のエントリーポイントを AutoExec マクロにしておけば起動時に自動実行されるので、起動スイッチでマクロを指定する必要はなくなります。しかし、そうするとメンテナンス目的等で MDB を直接開くときにもマクロが実行されてしまいます。ここでは AutoExec マクロではなく、x スイッチでマクロを指定する方法を取りました。
拡張子の関連付けの設定はレジストリに保存されています。詳しくはファイル拡張子とプログラムの関連付け - Web/DB プログラミング徹底解説をご参照ください。
いったん上記の設定を手作業で行えば、後はレジストリの設定を .reg ファイルに書き出すことができます。
共有フォルダに .reg ファイルを配置すれば、各ユーザがダブルクリックするだけで簡単に同じ設定を登録できます。
もちろんあなたが管理者であれば、グループポリシーを使って一斉に適用するなど、お好みの方法で展開するとよいでしょう。
いつも楽しく拝見・そして勉強させていただいています。
返信削除今作っているアプリケーションで、まさにこの方法を探していました。/cmdで渡すというのは掴んだのですが、行き詰っていた中でこの方法にめぐりあえました。
お陰様で独自アプリのプリセットを独自ファイルとして入れ替えする仕組みを実装できました。Windows7だとDDEセッティングする場所が画面上にないためにレジストリに直書きしましたが、あとは多重起動せずに、ファイルダブルクリックだけで起動中もインポートできるような仕組みを考えています。
本当に素晴らしいテクニックありがとうございました。
しばらく別方面に取り組んでいて、コメントに気づくのが遅れました。すみません。
返信削除お役に立てたようで何よりです。
Win7 には DDE 無いんですか(設定画面だけ無くなったのかな)。まあ DDE はレガシーですから、むしろ DDE には頼らないほうが健全なんでしょうけど。
追加の仕組みができたら、どんな風に実装したのか(差し支えなければ)教えてください。興味あります。
それでは。