AccessVBAとExcelマクロとVBScriptの(ブラウザ操作上の)注意すべき相違点

AccessVBAとExcelマクロとVBScriptの(ブラウザ操作上の)注意すべき相違点

AccessVBAとExcelマクロとVBScriptの(ブラウザ操作上の)注意すべき相違点

私はVBScriptでの記載は初経験。言語的には AccessVBA と大差ないので苦ではありませんでしたが、悩むポイントがいくつかありました。

その中の1つがブラウザのアクティブ化です。

アクセスとExcelを経由してブラウザを起動すると勝手にアクティブにしてくれる

AccessやExcelからブラウザを起動すると、勝手に最前面でブラウザを開いてくれます。

VBSだとこれが機能しません。

なので、ブラウザをアクティブにする工程が必要となるのですが、ココにも1つの課題があります。

CreateObject(“InternetExplorer.Application”) で起動するとプロセスIDを取得しない

アクセスやExcelからブラウザを起動するとプロセスIDを勝手に取得してくれます。
(まぁ、多分プロセスIDを取得するから最前面で表示になるのでしょうけど)

VBSではプロセスIDが取れていないので『IDを指定してアクティブ化』という魔法は使えません。
幾つかのステップを踏んでアクティブにする必要があります。

  1. Win32プロセスを使って開いているウィンドから指定のプロセス名を探す
  2. 探し当てたプロセス名のプロセスIDを取得する
  3. プロセスIDをアクティブ化する

具体的なプログラムはこんな

VBSの場合は呼び出し方で取得の有無が変わる

VBSではプロセスIDを取得してくるアプリ起動方法もあります。

こうやってWScriptで起動して上げるとプロセスIDも取得しています。

【 objShell.ProcessID 】IDを吐き出してくれるのでとても便利ですが、COMのサポートは無くなります。

まとめ

思えばWSH/VBSでのscript作成は終始『ウィンドのアクティブ化との格闘』でした。

それ以外はPCで行っている操作をキーボードで追えばよいだけだったので難しくはないんです。

でも、ウィンドがアクティブになってくれないと全ての操作が(エクスフローラとか)別窓で処理されてしまうので必要なやつ勝手に削除してしまったり、重要なスクリプトにゴミのような文字書き込んで動かなくしたりなど右往左往してしまいます。

皆さんも書く時は気を付けましょう。