10
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-08-18

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

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

10
21
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?