Internet Explorer自動操作

VBAでIE操作「SendKeys(キーボード入力)で無理やり突破する」

IEでテキストボックスやポップアップがどうしても入力できない

Excel VBAマクロでIEを自動制御する際、以下のように通常のIE制御では処理が突破できないケースがあります

■どうしても処理が進まないケース
・サイトによってはテキストボックスやパスワードボックスへの文字反映が出来ないケース
・Basic認証やダウンロードファイルのポップアップを処理したいケース
上記の場合は、最終手段としてSendKeyで無理やり突破しましょう。
IE自動制御の場合は下記記事のやり方をした方が安全です。
SendKeysでキーが効かない場合の対処法【ExcelVBA】

IEで指定した要素へSendKeysで入力するサンプルコード

Public Sub sample_ie_sendkeys()
    Dim objIE As InternetExplorer
    Dim sURL As String: sURL = "https://vba-create.jp"
    
    '■InternetExplorerを起動
    Set objIE = New InternetExplorer
    objIE.Visible = True
    
    '■Basic認証画面を自動ログインする
    objIE.navigate sURL
    
    Application.Wait Now + TimeValue("0:00:02")
    
    objIE.Document.getElementsByClassName("search-edit")(0).Focus
    '■SendKeysでポップアップに対してキーボード操作を行う
    With CreateObject("Wscript.Shell")
        .SendKeys "IE操作"
        .SendKeys "{ENTER}"
    End With
End Sub

IEでBasic認証をSendKeysでログインするサンプルコード

'■Basic認証をSendKeysでログインするサンプル
Public Sub sample_ie_basic_sendkeys()
    Dim objIE As InternetExplorer
    Dim sId As String, sPass As String, sIdPass As String
    Dim sURL As String: sURL = "https://vba-create.jp" '■実際にはBasic認証があるサイトURLを入れる
    
    '■IDとPassword
    sId = "testid"
    sPass = "pass1234"
    
    '■InternetExplorerを起動
    Set objIE = New InternetExplorer
    objIE.Visible = True
    
    '■Basic認証画面を自動ログインする
    objIE.navigate sURL
    Application.Wait [Now() + "00:00:02"]
    
    '■SendKeysでポップアップに対してキーボード操作を行う
    With CreateObject("Wscript.Shell")
        .SendKeys sId
        .SendKeys "{TAB}"
        .SendKeys sPass
        .SendKeys "{ENTER}"
    End With
End Sub

注意点

  •   Application.Wait [Now() + “00:00:02”]と指定秒数待ちましょう。待たないと処理が出来ません。
  • 下記の読み込み待ちの処理をしようと思うと読み込み待ちで止まってしまうので注意ください。
    VBAでIE操作「ブラウザの読込待ち」処理をパーツ化する【エクセルマクロ】
  • SendKeysはキーボードの操作をするだけなので、不安定です。
    あくまでも最終手段として、無理やり突破する場合にのみ使用するのが望ましいです。

その他

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

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

 

コメント

  1. いつも参考にさせていただいております。
    細かいところで恐縮ですが、

    With CreateObject(“Wscript.Shell”)
    SendKeys sId
    SendKeys “{TAB}”
    SendKeys sPass
    SendKeys “{ENTER}”
    End With
    の部分ですが、SendKeysの前に「.」がないので、
    WSHのSendKeysではなく、VBAのSendKeysを使用している事になっています。
    ご確認ください。

    • 指摘ありがとうございます!
      通常CreateObject(“Wscript.Shell”)を変数に入れて処理をしており、変数化するよりWith~End Withのがシンプルかとそちらに変更した際に気づかなかったようです。修正しました。

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