AccessVBAとExcelマクロとVBScriptの(ブラウザ操作上の)注意すべき相違点
- 2020.09.03
- WSH/VBS備忘録
- Automation化, VBA, VBE, VBS, Windows10, WSH, アクティブウィンド, スクレイピング, ブラウザ操作, 自動処理, 自動化
AccessVBAとExcelマクロとVBScriptの(ブラウザ操作上の)注意すべき相違点
私はVBScriptでの記載は初経験。言語的には AccessVBA と大差ないので苦ではありませんでしたが、悩むポイントがいくつかありました。
その中の1つがブラウザのアクティブ化です。
アクセスとExcelを経由してブラウザを起動すると勝手にアクティブにしてくれる
AccessやExcelからブラウザを起動すると、勝手に最前面でブラウザを開いてくれます。
VBSだとこれが機能しません。
なので、ブラウザをアクティブにする工程が必要となるのですが、ココにも1つの課題があります。
CreateObject(“InternetExplorer.Application”) で起動するとプロセスIDを取得しない
アクセスやExcelからブラウザを起動するとプロセスIDを勝手に取得してくれます。
(まぁ、多分プロセスIDを取得するから最前面で表示になるのでしょうけど)
VBSではプロセスIDが取れていないので『IDを指定してアクティブ化』という魔法は使えません。
幾つかのステップを踏んでアクティブにする必要があります。
- Win32プロセスを使って開いているウィンドから指定のプロセス名を探す
- 探し当てたプロセス名のプロセスIDを取得する
- プロセスIDをアクティブ化する
具体的なプログラムはこんな
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
Option Explicit Dim strIEexe Dim intProcID strIEexe = "iexplore.exe" 'IEのウィンドウをアクティブ化する call ActiveIE sub ActiveIE() Dim objWshShell GetProcID(strIEexe) If intProcID = 0 Then WScript.Quit(0) Exit Sub End If Set objWshShell = WScript.CreateObject("WScript.Shell") objWshShell.AppActivate intProcID Set objWshShell = Nothing End Sub 'プロセスIDを探す Function GetProcID(ProcessName) Dim Service Dim QfeSet Dim Qfe Set Service = WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer Set QfeSet = Service.ExecQuery("Select * From Win32_Process Where Caption='"& ProcessName &"'") intProcID = 0 For Each Qfe in QfeSet intProcID = Qfe.ProcessId Exit For Next GetProcID = intProcID <> 0 End Function |
VBSの場合は呼び出し方で取得の有無が変わる
VBSではプロセスIDを取得してくるアプリ起動方法もあります。
1 2 |
Set objShell = WScript.CreateObject ("WScript.Shell") objShell.Run (ブラウザexeへのパス) |
こうやってWScriptで起動して上げるとプロセスIDも取得しています。
【 objShell.ProcessID 】IDを吐き出してくれるのでとても便利ですが、COMのサポートは無くなります。
まとめ
思えばWSH/VBSでのscript作成は終始『ウィンドのアクティブ化との格闘』でした。
それ以外はPCで行っている操作をキーボードで追えばよいだけだったので難しくはないんです。
でも、ウィンドがアクティブになってくれないと全ての操作が(エクスフローラとか)別窓で処理されてしまうので必要なやつ勝手に削除してしまったり、重要なスクリプトにゴミのような文字書き込んで動かなくしたりなど右往左往してしまいます。
皆さんも書く時は気を付けましょう。
-
前の記事
WSH/VBSでデスクトップブラウザを起動してスクレイピング 2020.09.03
-
次の記事
VBScriptとJScriptって何が違ってWSHとはどう違うのか 2020.09.03
コメントを残す