前提・実現したいこと
VBAでWebサイト上のテキストボックスに値を入力し、当該テキストボックスのonchangeイベントに設定されている関数「"onchangeMyTxtBox(this)」を実行させたいです。
検討している実装方法で課題となるIEventTarget型としてのテキストボックスボックスの取得、もしくはIHTMLElement型からIEventTarget型へのキャストの方法がわからないため方法を教えていただけないでしょうか。
そもそもこ実装方法をかえて、別の実装方法(直接関数を実行させるなど)のアドバイスでもいただけると幸いです。
<検討している実装方法>
当該テキストボックスのonchangeイベントをMSHTML.IEventTargetクラスの
dispatchEventを用いて発生させることで、当該関数を実行する
発生している問題・エラーメッセージ
当該テキストボックスをIEventTarget型オブジェクトとして取得できない。MSHTML.IHTMLElement型オブジェクトとして取得はできるが、その場合は
MSHTML.IEventTarget型にキャストしないとdispatchEventで
onchageイベントを発生させられない。
ソースコードの下から2行目で型不一致のエラーが発生します。
該当のソースコード
HTML
1 <INPUT type="text" name="my_txtbox" class="my_class" onBlur="onblurMyTxtBox(this)" onChange="onchangeMyTxtBox(this)">
VBA
1Dim ie As InternetExplorer 2Dim doc As HTMLDocument 3Dim elm As IHTMLElement 4Dim trgt As IEventTarget 5Dim evt As DOMEvent 6 7Set ie = CreateObject("InternetExplorer.Application") 8ie.navigate "https://mytestsite.jp" 9ie.Visible = True 10Call waitIE(ie) 11 12Set doc = ie.document 13Set evt = doc.createEvent("HTMLEvents") ' 14evt.initEvent "change", True, True 15 16'勤務時間の入力 17Set elm = ie.document.getElementsByName("my_txtbox")(0) 18elm.Value = "test" 19Set trgt = ie.document.getElementsByName("my_txtbox")(0) '★「型が一致しません」エラー(要キャスト) 20trgt.dispatchEvent (evt)
試したこと
・キャストせずにie.document.getElementsByName("my_txtbox").dispatchEvent (evt)
→ IHTMLElement型にはdispatchEventメソッドがないため「メソッドが存在しません」エラー
※Web上ではこれで動くという記述もあり、Excelのバージョンが古いのが原因?
・キャストせずにie.document.getElementsByName("my_txtbox").fireEvent ("onchange")
→ エラーは出ないがIE11では動作しない
・Ctype関数でキャストする
→ VBAには存在しない
・trgt = ie.document.getElementsByName("my_txtbox")(0).objectとして
コンパイラにキャストさせる
→ IHTMLElement型にはobjectプロパティがない
補足情報(FW/ツールのバージョンなど)
IEのバージョン11
ExcelのバージョンMicrosoft Office Professional Plus 2010
回答1件
あなたの回答
tips
プレビュー