外部アプリケーションを起動する時、VBAのShell関数を使えば簡単にできます。
ネット検索で簡単に見つかりますが、最もシンプルなコードは次の通りなんだ。
Sub NotePad()
Shell "notepad.exe" 'メモ帳を起動する実行ファイル
End Sub
Sub NotePadKill()
Shell "taskkill.exe /F /IM notepad.exe" '強制的に終了する実行コマンド
End Sub
それで、立ち上げたアプリケーションは、この関数を使って強制終了できます。
上に上げたコードの通りですが、このtaskkill.exeの挙動がおかしい場合もある。
それは、For~Nextのようなループ処理の中で、強制終了を実行したときです。
自分のケースでは、ブラウザのクロームで複数タブを開いていくプロセスなの。
タブを二三十個ほど開きますが、たくさん開かずに、途中で終了させています。
そして、再度、クロームを立ち上げて全部開き終えたら、ブラウザを閉じます。
Sub ChrmRun()
With CreateObject("Wscript.Shell")
.Run "chrome.exe -url https://www.yahoo.co.jp/"
End With 'クロームを実行してヤフーを開く
End Sub
このブラウザを開くコードは、OSに関連付けられていないアプリに向いている。
上記のShell関数ですと、実行ファイルのフォルダーまでパスが通っていました。
しかし、ブラウザのクロームは、"ChDir”でパスを通しても、起動できません。
なので、代わりに"Wscript.Shell"のオブジェクトを指定すると立ち上がります。
それで、気がついたのは、ループ処理の中でブラウザを強制終了する場合です。
ブラウザが終了しないで、そのままタブが開き続けてしまうのを発見しました。
なぜなのか、分からないでいましたが、ある時、ネットのコードに気がついた。
それは、”cmd.exe”という、コマンドプロンプトから強制終了させることです。
Sub CrmeKill()
Shell "cmd.exe /c taskkill.exe /F /IM chrome.exe"
End Sub '強制終了の実行コマンド
このコマンドラインに、起動オプションの"/c”がついていますが、これがキモ。
文字列に指定されたコマンドを実行した後で終了すると、説明されていました。
というわけで、ループ処理内でも、このコマンドプロンプトから強制終了可能。
ただ、ループ処理の中で、ブラウザを閉じて後に、改めて立ち上げたら、最初に指定したURLが開かずに、次に指定したURLから開いてくるエラーがあるので、この対策は、次回の説明にしようと思ったのでした。
0 件のコメント:
コメントを投稿