Excel VBAでIEを操作 onChangeのあるセレクトメニューを操作 JavaScript実行
2016/10/17
Excelでアンカーをたどり、リンクしていく方法。
検索キーワードを入れて検索する方法。
該当ページにセレクトタグ(プルダウンのメニュー)があった場合の選択する方法を例示してきました。
セレクトタグに「[onchange」命令があった場合、前回のやり方ではonchange命令が効きませんので、onChange命令を機能させる方法を今回は例示します。
そこで今回のお題は
・セレクトタグのあるサイトを表示
・メニューからプルダウンの2番目を選択し、onchange命令を機能させる
を実践。
上記お題は、以下の操作をすることにより可能となります。
・エクセルを起動
・(バージョンによっては)マクロを有効にする
・マクロの編集画面で、以下のコードをコピー&ペースト
・マクロを実行
コピペするコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
Dim ObjIE As Object '変数を定義 Dim Obj As Object '変数を定義 'Sleepを使用する場合のお約束 Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Sub IE_open() Set ObjIE = CreateObject("InternetExplorer.Application") 'IEを開く際のお約束 ObjIE.Visible = True 'IEを開く際のお約束 ObjIE.Navigate "http://www.yahoo.co.jp '開きたいサイトのURLを指定 Sleep (1000) '1秒間待つ Do While ObjIE.ReadyState <> 4 'サイトが開かれるまで待つ(お約束) Do While ObjIE.Busy = True 'サイトが開かれるまで待つ(お約束) Loop Loop For Each Obj In ObjIE.Document.getElementsByTagName("select") '表示されているサイトのselectタグ一つずつに対して以下の処理を実施 Obj.selectedindex = 1 'プルダウンメニューの2番目を選択 Obj.onchange 'onchangeを命令 Exit For '選択後、処理を抜ける Next '次のタグを処理 End Sub |
「サンプル2」が選択され、メッセージボックスが出力されていませんか?
なお、今回の見本実演に使用したサイトのコードは以下の通りです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<html> <head> <title>セレクトボックステスト用</title> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> </head> <body> <select name="example" onChange="kakunin()"> <option value="サンプル1">サンプル1</option> <option value="サンプル2">サンプル2</option> <option value="サンプル3">サンプル3</option> </select> <script type="text/javascript"> function kakunin(){ alert ("変更されました"); } </script> </body> </html> |
ではソースの解説です。
青字箇所は以前説明済みのために、赤字箇所に絞って記載します。
1 |
Obj.onchange |
セレクトタグでonchange命令があるために、、上記の通り「onchange」を実行します。
オプションタグで選択する場合は、再度セレクトタグを検索の上、セレクトタグで当該命令を実行する必要があります。
(そのため、以前記載したとおりオプションタグではなく、セレクトタグ上で選択する方がおすすめとなります。)
たったこれだけで、JavaScriptのonchange命令が機能します。
注意したいのは、
・Selectタグに対して、onchege命令をしていること(Optionタグではないこと)
・選択してからonchange命令を実行する
ことです。
なお、当該命令を以下の通り変更いただいても同じく機能します。
1 |
Obj.fireEvent("onchange") |
「fireEvent」でonchangeを強制的に実行させています。
今回のポイントの整理です。
・SELECTタグで「onChange」命令がある場合、onChangeを実行
・上記命令の代替手段として、「fireEvent('onchange')」でもonChangeを実行可能
といった2点がポイントです。