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

  • 0
    いいね
  • 0
    コメント

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

    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回目。。。