ie-excel

エクセル・マクロでie操作

Excel VBAでIEを操作 onChangeのあるセレクトメニューを操作 JavaScript実行

2016/10/17

Excelでアンカーをたどり、リンクしていく方法。
検索キーワードを入れて検索する方法。
該当ページにセレクトタグ(プルダウンのメニュー)があった場合の選択する方法を例示してきました。

セレクトタグに「[onchange」命令があった場合、前回のやり方ではonchange命令が効きませんので、onChange命令を機能させる方法を今回は例示します。

そこで今回のお題は
・セレクトタグのあるサイトを表示
・メニューからプルダウンの2番目を選択し、onchange命令を機能させる
を実践。

上記お題は、以下の操作をすることにより可能となります。
・エクセルを起動
・(バージョンによっては)マクロを有効にする
・マクロの編集画面で、以下のコードをコピー&ペースト
・マクロを実行

コピペするコード

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」が選択され、メッセージボックスが出力されていませんか?

なお、今回の見本実演に使用したサイトのコードは以下の通りです。


 
  
  
 

 
   



 

ではソースの解説です。
青字箇所は以前説明済みのために、赤字箇所に絞って記載します。

      Obj.onchange

セレクトタグでonchange命令があるために、、上記の通り「onchange」を実行します。
オプションタグで選択する場合は、再度セレクトタグを検索の上、セレクトタグで当該命令を実行する必要があります。
(そのため、以前記載したとおりオプションタグではなく、セレクトタグ上で選択する方がおすすめとなります。)

たったこれだけで、JavaScriptのonchange命令が機能します。

注意したいのは、
・Selectタグに対して、onchege命令をしていること(Optionタグではないこと)
・選択してからonchange命令を実行する
ことです。

なお、当該命令を以下の通り変更いただいても同じく機能します。

      Obj.fireEvent("onchange")

「fireEvent」でonchangeを強制的に実行させています。

今回のポイントの整理です。
・SELECTタグで「onChange」命令がある場合、onChangeを実行
・上記命令の代替手段として、「fireEvent('onchange')」でもonChangeを実行可能
といった2点がポイントです。

-ExcelでIE操作