ブラウザ操作を自動化して欲しいって依頼を受けたので、
エクセルからインターネットエクスプローラーを操作するマクロを組んだ。
Excel2016
InternetExplorer11
ウェブ上のフォームに値を自動で入力したかったのだが、
JavaScriptが発火しなくて困った。
selectタグで選んだoptionによって、
項目が動的に変化するようなよくあるパターン。
どうやらoptionを選択するだけではイベントが発生しないようだ。
ググると出てくるのがfireEvent
こんな感じで使う。
' <option value="1">1</option>を選択する
With ie.Document.getElementById("mySelect")
.Value = "1"
.fireEvent ("onchange")
End With
でも、これselect
にoncahge
イベントが仕込まれてないと発火しない。
今回は外部の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回目。。。