大体でIT
大体でIT
2021/1/18
Excel VBAで、別アプリケーションを起動する方法について、ご紹介します。アプリケーションの起動には、「Wscript.Shell」の「Run」を使います。具体的なVBAコードを使って、解説します。
この記事では、別アプリケーションを起動する方法について、ご紹介しました。
別アプリケーションを起動するには、「Wscript.Shell」の「Run」を使うと便利です。
注意点として、起動するファイル名にスペースがある場合は、空白「""""」で囲む必要があります。
起動する際は、「非同期」と「同期」があって、状況に応じて使い分けることができるので、便利です。
では、別アプリケーションを起動する方法について、解説していきます。
VBAで、別アプリケーションを起動する方法について、ご紹介します。
別アプリケーションを起動したい場合は、「Wscript.Shell」の「Run」を使うと便利です。
「Wscript.Shell」の「Run」は、次のように入力して使用します。
使い方
「CreateObject("Wscript.Shell").Run ファイル名」
実行すると、「拡張子に紐づいているアプリケーション」で、ファイルを開くことができます。
事前に、拡張子の紐づけを変更しておけば、使うアプリケーションを変更できます。
では、「Wscript.Shell」の「Run」を使って、新規のメモ帳を開いてみます。
Sub TEST1()
With CreateObject("Wscript.Shell")
'新規のメモ帳を起動
.Run "notepad.exe"
End With
End Sub
新規のメモ帳を起動
次は、「Wscript.Shell」の「Run」を使って、保存されているメモ帳を開いてみます。
「Run」のあとに、メモ帳のフルパスを入力するとできます。
Sub TEST2()
With CreateObject("Wscript.Shell")
'メモ帳を起動
.Run "C:\TEST\TEST.txt"
End With
End Sub
メモ帳を起動
「.txt」はメモ帳に紐づいているので、メモ帳で開かれました。
次は、「Wscript.Shell」の「Run」を使って、PDFファイルを起動してみます。
Sub TEST3()
With CreateObject("Wscript.Shell")
'PDFを起動
.Run "C:\TEST\TEST.pdf"
End With
End Sub
PDFを起動
「.pdf」は、「Adobe Acrobat Reader」に紐づいているので、「Adobe Acrobat Reader」で開かれました。
次は、「Wscript.Shell」の「Run」を使って、CSVファイルを起動してみます。
Sub TEST4()
With CreateObject("Wscript.Shell")
'CSVファイルを起動
.Run "C:\TEST\TEST.csv"
End With
End Sub
CSVを起動
「.csv」は、Excelに紐づいているので、Excelで表示されました。
「Wscript.Shell」の「Run」を使って、Excelを起動することもできます。
Sub TEST5()
With CreateObject("Wscript.Shell")
'Excelファイルを起動
.Run "C:\TEST\TEST.xlsx"
End With
End Sub
Excelを起動
まぁ、起動はできますけど、Excelを開くなら、「Workbooks.Open」がいいですね。
「Wscript.Shell」の「Run」を使う際の注意で、ファイル名にスペースがあると、エラーとなります。
ファイル名にスペースがある場合は、文字列を空白「""""」で囲みましょう。
ファイル名にスペース「" "」がある場合で、メモ帳を起動してみます。
Sub TEST6()
With CreateObject("Wscript.Shell")
'メモ帳を起動
.Run "C:\TEST\TEST .txt" '←エラーとなる
End With
End Sub
ファイル名のスペースを入力
エラーとなる
ファイル名にスペース「" "」があるので、エラーとなりました。
ファイル名に「" "」がある場合は、空白「""""」で囲む必要があります。
Sub TEST7()
With CreateObject("Wscript.Shell")
'ファイル名にスペースがある場合
.Run """" & "C:\TEST\TEST .txt" & """"
End With
End Sub
スペースがある場合
空白「""""」で囲んで起動
ファイル名にスペースがあっても、空白「""""」で囲むことで、メモ帳を起動することができました。
「Wscript.Shell」の「Run」では、アプリケーションを指定して、開くことができます。
起動するアプリケーションを指定するには、次のように入力します。
「CreateObject("Wscript.Shell").Run "起動するアプリケーションのフルパス 起動するファイルのフルパス"」
最初に、「起動するアプリケーションのフルパス」を入力して、「半角スペース」を入力したあとに、「起動するファイルのフルパス」を入力するのがポイントです。
「.csv」の拡張子には、Excelで開くように紐づけています。
「.csv」がExcelに紐づいているか確認
「Wscript.Shell」の「Run」を使って、「.csv」ファイルを開いてみます。
Sub TEST8()
With CreateObject("Wscript.Shell")
'.csvをエクセルで起動
.Run "C:\TEST\TEST.csv"
End With
End Sub
「.csv」ファイルを「メモ帳」で起動
この「.csv」ファイルを「メモ帳」で起動してみます。
Sub TEST9()
With CreateObject("Wscript.Shell")
'CSVをメモ帳で開く
.Run "C:\Windows\System32\notepad.exe C:\TEST\TEST.csv"
'↓でもできます。
'.Run "notepad.exe C:\TEST\TEST.csv"
End With
End Sub
「.csv」ファイルを、メモ帳で起動することができました。
起動するアプリケーションを指定して、ファイルを起動したい場合に、使えます。
「Wscript.Shell」の「Run」では、「非同期」と「同期」が選択できます。
「非同期」は、起動するVBAコードを実行して、その完了にかかわらず、次のVBAコードへ進みます。
「同期」の場合は、アプリケーションを起動するVBAコードを実行すると、アプリケーションが起動して閉じられると、次のVBAコードに進みます。
非同期:起動完了に関係なく、次のVBAコードに進む
同期:起動して閉じた後に、次のVBAコードに進む
まず、非同期で複数のアプリケーションを、起動してみます。
Sub TEST10()
With CreateObject("Wscript.Shell")
.Run "C:\TEST\TEST1.pdf" '非同期で開く
.Run "C:\TEST\TEST2.pdf" '非同期で開く
.Run "C:\TEST\TEST3.pdf" '非同期で開く
End With
Debug.Print "完了"
End Sub
複数のPDFファイル
起動完了に関係なく実行される
結果は、複数のPDFファイルが起動されて、最後のVBAコードも実行されています。
これが、「非同期」で「Wscript.Shell」の「Run」を実行した場合です。
「Wscript.Shell」の「Run」を同期して、実行する場合は、3番目の引数に「True」を入力します。
「CreateObject("Wscript.Shell").Run ファイル名, , True」
複数のPDFファイルを、「同期」した場合で起動してみます。
Sub TEST11()
With CreateObject("Wscript.Shell")
.Run "C:\TEST\TEST1.pdf", , True '同期して開く
.Run "C:\TEST\TEST2.pdf", , True '同期して開く
.Run "C:\TEST\TEST3.pdf", , True '同期して開く
End With
Debug.Print "完了"
End Sub
先ほどと同じPDFファイルを使って、試してみます。
複数のPDFファイル
「TEST1.pdf」が開く
「TEST2.pdf」が開く
「TEST1.pdf」を閉じると、「TEST2.pdf」が開きます。
「TEST3.pdf」が開く
「TEST2.pdf」を閉じると、「TEST3.pdf」が開きます。
最後のVBAコードが実行される
「TEST3.pdf」を閉じると、最後のVBAコードが実行されます。
こんな感じで、「同期」にすると、「Run」のコードが完了したあとに、次のVBAコードに進みます。
この記事では、別アプリケーションを起動する方法について、ご紹介しました。
別アプリケーションを起動するには、「Wscript.Shell」の「Run」を使うと便利です。
注意点として、起動するファイル名にスペースがある場合は、空白「""""」で囲むというのがありました。
起動する際は、「非同期」と「同期」がありますので、状況に応じて、使い分けるといいです。
参考になればと思います。最後までご覧くださいまして、ありがとうございました。