VBA開発

VBAでIE操作「チェックボックスの選択/解除」【エクセルマクロ】

VBAでIEを起動し、Webページ内のチェックボックスの選択・解除する方法です。
要素を指定し、クリック処理を入れるだけです。
チェックを付ける方法もありますが、お勧めしません。

チェックボックスを選択・解除するサンプルコード

'■InternetExplorerでチェックボックスをクリック、選択状態にする。
Sub sample_IE_checkbox_click()
    Dim objIE As InternetExplorer
    
    '■IEを起動
    Set objIE = CreateObject("InternetExplorer.Application")
    objIE.Visible = True
 
    '■該当ページへ遷移
    objIE.navigate "https://vba-create.jp/kyoteivba-contact/"
    Call Call_IE_WaitTime
    

    '■ページ内チェックボックス「上記、事前設定は終えてますか?」は
    '  name="checkbox-672[]"の1番目 = (0)番目 Trueがチェック入った状態
    objIE.document.getElementsByName("checkbox-672[]")(0).Click 'True
    objIE.document.getElementsByName("checkbox-672[]")(0).Click 'false
    '■Checkedで処理する場合は以下。※オススメしません。詳細は後述
    objIE.document.getElementsByName("checkbox-672[]")(0).Checked = True
    objIE.document.getElementsByName("checkbox-672[]")(0).Checked = False
 
End Sub

'■HTMLサンプル(name="checkbox-672[]"があり、name要素が存在)
<input type="checkbox" name="checkbox-672[]" value="上記、事前設定は終えてますか?">

ClickとCheckedの違い

今回のキモはClickとChecked = Trueの動作の違いを理解する必要があります。
onclick等のJavaScript(JS)要素があるチェックボックスでは、Checked = Trueは使用できません。
画面上はチェックボックスが動作しても、チェックボックスの結果は以前の状態のままです。
TrueならTrueのまま。FalseならFalseのまま、False→True True→Falseとはなりません。

動作表

VBA(DOM)操作チェックボックス
状態
JavaScript(JS)なしJavaScript(JS)あり
チェックボックス
結果
チェックボックス
結果
ClickチェックなしTRUETRUE
チェックありFALSEFALSE
Checked=TrueチェックなしTRUETRUE(だが反応しない)
チェックありTRUETRUE(だが反応しない)
Checked=FalseチェックなしFALSEFALSE(だが反応しない)
チェックありFALSEFALSE(だが反応しない)

動作が異なる理由

Clickの場合、人間が手動操作した時と同じようにクリックをしてチェックボックスを反応させます。
Checkedの場合、内部的にTrue/Falseの判定をさせています。

チェックボックスにJavaScript要素がない場合
→Click同様の動作となり、問題ありません。

チェックボックスにJavaScript要素がある場合
→チェックボックスの処理はしたが、JavaScript側の動作(onClick処理等)を行っていない為、
 IE上は何もしていない扱いと同様になります。

その他

毎度おなじみですが、Call_IE_WaitTimeの処理はこちらを参照ください。

その他

Internet Explorerを使用して、Webスクレイピングは敷居が高い風に捉えられますが、
上記のように、パーツ化して組み合わせ処理するだけです。

Web上のデータを触りたい要望は会社様でも個人様でも多いと思います。
VBA IE操作を覚えて効率化しませんか?
作成が大変であれば弊社で代行開発も可能です。お気軽にお問い合わせください。

 

コメント

タイトルとURLをコピーしました