VBAメモ JavaScriptイベントを強制的に発火させる

ブラウザ操作を自動化して欲しいって依頼を受けたので、
エクセルからインターネットエクスプローラーを操作するマクロを組んだ。

Excel2016
InternetExplorer11

ウェブ上のフォームに値を自動で入力したかったのだが、
JavaScriptが発火しなくて困った。
selectタグで選んだoptionによって、
項目が動的に変化するようなよくあるパターン。

どうやらoptionを選択するだけではイベントが発生しないようだ。

ググると出てくるのがfireEvent

こんな感じで使う。

' <option value="1">1</option>を選択する

With ie.Document.getElementById("mySelect")
    .Value = "1"
    .fireEvent ("onchange")
End With

でも、これselectoncahgeイベントが仕込まれてないと発火しない。

今回は外部のJSファイルにある関数を実行させたい。

で、見つけたのがこれ。
https://msdn.microsoft.com/ja-jp/library/ff975247(v=vs.85).aspx

Dim evt As Object
Set evt = ie.document.createEvent("HTMLEvents")
evt.initEvent "change", True, False

With ie.Document.getElementById("mySelect")
    .Value = "1"
    .dispatchEvent evt
End With

これで、ようやくJSが発火するようになった。
やれやれ。


エクセルからブラウザ操作を自動化したいという需要ってけっこうあるのかしら。
頼まれたのは2回目。。。