最終更新日:2019-12-21VBAでファイルを既定のアプリで開く方法Excelマクロで、エクセル以外のファイルを既定のアプリケーションで開く場合の方法について何通りか解説します、VBAでファイルを単純に開くだけの場合についてになります。対応するアプリケーション毎に個別の対応が必要になりますが、Windowsで開けるファイルであり、開くだけなら、どんなファイルでも開くことができます。実行テストメイン以下で紹介しているファイルを既定のアプリで開くプロシージャーの実行テスト用のメインプロシージャーです。"ファイルが存在しません。SubCallの部分は、テストしない行はコメントアウトして実行してください。ファイルが存在しなければ意味がないので、ここで確認しています。Shell関数VBAのShell関数を使う方法です。Excelを自動操作するのがVBAですが、他のアプリケーションを起動したい場合も時に出てきます。他のアプリケーションを起動する手段としてVBAに標準で用意されているものがShell関数です。フォルダ、またはドライブを含めて指定できます。ラインのスイッチを指定します。実行するプログラムのウィンドウの形式に対応するバリアント型の値を指定します。省略すると、プログラムはフォーカスを持った状態で最小化され、実行を開始します。フォーカスを持ち、非表示にされるウィンドウ。最後にウィンドウを閉じたときのサイズと位置に復元されるフォーカスを持たないウィンドウ。現在アクティブなウィンドウは、アクティブのままです。最小化表示されるフォーカスを持たないウィンドウ。現在アクティブなウィンドウは、アクティブのままです。Subファイルを開いたアプリケーションの終了を待つ場合はAPIを使用する必要があります。外部サイトですが以下で紹介されています。VBAですが今回の場合は、ファイルが分かっているだけで、起動されるプログラムは不明です。従って、拡張子に紐づくexeがわかっていないとこの方法は使えません。これを自動で取得するのは、かなり面倒で現実的ではないでしょう。拡張子を判定して起動するexeを切り替える必要がある場合は、別の方法を選択したほうが良いでしょう。プロンプト)VBAで直接Shell関数を使うのではなく、VBAからはバッチを起動して、そのバッチの中でファイルを開く方法です。Subファイル名にスペースが含まれている場合の対応として、前後に"を追加しています。拡張子に紐づいているアプリケーションでファイルが開かれます。プロンプトは、ファイルが閉じられるまで待ち状態になります。先のShell関数と同様の方法になります。拡張子に紐づくアプリケーションがない場合は、以下のメッセージが出ます。上の画像は、Windows10での画面です。WScript.ShellWshShellオブジェクトのRunメソッドを使います。特殊フォルダの取得(WScript.Shell,SpecialFolders)デスクトップのフォルダ、スタートメニューのフォルダ、個人用ドキュメントのフォルダなど、Windowsの特殊フォルダを取得するには、ネイティブのWindowsシェルへのアクセスを提供するWScript.ShellのSpecialFoldersプロパティを使用します。CreateObject関数で作成したWscript.ShellのSpecialFolder...こちらを参照してください。ラインを示す文字列値です。この引数には、実行可能ファイルに渡すべきパラメータをすべて含める必要があります。プログラムのウィンドウの外観を示す整数値です。ウィンドウを非表示にし、別のウィンドウをアクティブにします。ウィンドウをアクティブにして表示します。ウィンドウが最小化または最大化されている場合は、元のサイズと位置に戻ります。アプリケーションでウィンドウを最初に表示するときには、このフラグを指定してください。ウィンドウをアクティブにし、最小化ウィンドウとして表示します。ウィンドウをアクティブにし、最大化ウィンドウとして表示します。ウィンドウを最新のサイズと位置で表示します。アクティブなウィンドウは切り替わりません。ウィンドウをアクティブにし、現在のサイズと位置で表示します。オーダー上で次に上位となるウィンドウをアクティブにします。ウィンドウを最小化ウィンドウとして表示します。アクティブなウィンドウは切り替わりません。ウィンドウを現在の状態で表示します。アクティブなウィンドウは切り替わりません。ウィンドウをアクティブにして表示します。ウィンドウが最小化または最大化されている場合は、元のサイズと位置に戻ります。アプリケーションで最小化ウィンドウを復元するときには、このフラグを指定してください。アプリケーションを起動したプログラムの状態に基づいて、表示状態を設定します。スクリプト内の次のステートメントに進まずにプログラムの実行が終了するまでスクリプトを待機させるかどうかを示すブール値です。