Basic認証の自動ログイン「ieBasic2」の解説

こちらは、エクセルVBAでBasic認証の自動ログインする方法についての解説となります。VBAの知識がない方やBasic認証自動ログインツールをお求めの方には、無償で提供していますので「Basic認証自動ログインツール」よりダウンロードしてください。

前回の「Basic認証自動ログイン「ieBasic」」では、リクエストのヘッダ「Authorization」に直接ユーザー名・パスワードを格納してアクセスする方法を説明しました。
しかし、こちらの方法はデータ取得はできてもボタンクリックなど行う場合は、毎回リクエストする必要があり非常に手間です。
今回は、ヘッダーへリクエストするのではなく、「SendKeysステートメント」を使用した方法を解説します。

スポンサー リンク

Basic認証(ベーシック認証)自動ログインのサブルーチン


Private Declare Sub keybd_event Lib "user32" _
    (ByVal bVk As Byte, _
     ByVal bScan As Byte, _
     ByVal dwFlags As Long, _
     ByVal dwExtraInfo As Long)

Private Declare Function GetKeyboardState Lib "user32" _
    (pbKeyState As Byte) As Long
 
Const VK_NUMLOCK = &H90   '「NumLock」キー
Const KEYEVENTF_EXTENDEDKEY = &H1 'キーを押す
Const KEYEVENTF_KEYUP = &H2   'キーを放す

#If VBA7 Then
 Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal ms As LongPtr)
#Else
 Private Declare Sub Sleep Lib "kernel32" (ByVal ms As Long)
#End If

Sub ieBasic2(urlName As String, _
            basicId As String, _
            basicPass As String)

    Dim objIE As InternetExplorer
    
    Set objIE = CreateObject("InternetExplorer.Application")
    
    objIE.Visible = True
   
    objIE.navigate urlName

  '5秒停止
  Sleep 5000
        
  SendKeys basicId
  SendKeys "{TAB}"
  SendKeys basicPass
  SendKeys "{ENTER}"

  'IEが完全表示されるまで待機
  Call ieCheck(objIE)

  '「NumLock」キーをON
  Call numLockOn

End Sub

「NumLock」キーをONにするサブルーチン


sub numLockOn()
 Dim NumLockState As Boolean
 Dim keys(0 To 255) As Byte

 GetKeyboardState keys(0)
 NumLockState = keys(VK_NUMLOCK)
       
 '「NumLock」キーがオフの場合はオンにする。
 If NumLockState <> True Then
  'キーを押す
  keybd_event VK_NUMLOCK, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0
  'キーを放す
  keybd_event VK_NUMLOCK, &H45, KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0
 End If
End sub

Basic認証自動ログインのマクロ

Sub sample()

    Dim objIE As InternetExplorer

    'Basic認証ページへアクセスする
    Call ieBasic2("http://www.vba-ie.net/basic/test3.html", "user", "123456")

End Sub

実行結果

Basic認証の自動アクセス

引数は以下の3つが設定されています。

引数名データ型内容値の事例初期値省略
urlNameString表示させたいBasic認証URLの文字列"http://www.vba-ie.net/
basic/test3.html"
×
basicIdStringBasic認証のユーザー名文字列"user"×
basicPassStringBasic認証のパスワード文字列"123456"×
ieBasic2("表示させたいBasic認証URLの文字列","Basic認証のユーザー名文字列","Basic認証のパスワード文字列")

こちらは、全て必須項目となります。
「urlName」には、表示させたいBasic認証URLの文字列を設定します。
「basicId」にはBasic認証のユーザー名文字列を「basicPass」にはBasic認証のパスワード文字列を設定します。

それでは、1つずつコードを見ていきましょう。


Dim objIE As InternetExplorer

Set objIE = CreateObject("InternetExplorer.Application")

objIE.Visible = True

objIE.navigate urlName

こちらは何度も見ていますので理解できるかと思いますが、「urlName」で指定したURLをIEで開いています。
ここではこれまでと1つだけ違う点があります。
Navigateメソッドはページを表示させますが、Webブラウザがページを完全に表示するまで待ってはくれないと説明したのを覚えているでしょうか?
今回は、読込完了せずに処理を進めていきます。

なぜ、完了せずに処理を進めるかというと、今回はWebブラウザが表示されたと同時にBASIC認証の画面が表示されます。
認証画面が表示されている間は、ページにアクセスできていないので、もし読込待ちの処理を入れてしまうと、無限ループに陥るためです。

ですので、認証が完了した後に、読込待ちの処理を入れていきます。


'5秒停止
Sleep 5000

ページを表示させてから5秒停止の処理を入れています。これはBASIC認証画面が完全に表示されるのを待つための処理です。
PC環境によっては、停止する秒数を変更してください。


SendKeys basicId
SendKeys "{TAB}"
SendKeys basicPass
SendKeys "{ENTER}"

こちらは「SendKeysステートメント」を利用して直接入力処理を行っています。
まず、basicIdで設定されているユーザー名を入力します。次に{TAB}でタブキーを押下し、パスワードのテキストボックスをフォーカスにします。そしてbasicPassで設定されているパスワードを入力し、最後に{ENTER}でEnterキーを押下(press)させ、認証を行っています。

Basic認証の自動入力

Call ieCheck(objIE)

認証が完了したら、ページにアクセスしますので、ここで「ieCheckサブルーチン」を設定し、完全に読込が完了するまで待ちます。


Call numLockOn

ここでアクセスは完了なのですが、「SendKeysステートメント」にはNumLockキーがオフになるバグが存在します。
「numLockOnサブルーチン」はそのバグに対応するためのもので、NumLockキーをオンにする処理を入れています。

それでは、「numLockOnサブルーチン」を見ていきましょう。


Private Declare Sub keybd_event Lib "user32" _
    (ByVal bVk As Byte, _
     ByVal bScan As Byte, _
     ByVal dwFlags As Long, _
     ByVal dwExtraInfo As Long)

Private Declare Function GetKeyboardState Lib "user32" _
    (pbKeyState As Byte) As Long
 
Const VK_NUMLOCK = &H90   '「NumLock」キー
Const KEYEVENTF_EXTENDEDKEY = &H1 'キーを押す
Const KEYEVENTF_KEYUP = &H2   'キーを放す

今回は、NumLockキーをオンにするためにWindowsAPIの「keybd_event」を利用します。
「keybd_event」は、「SendKeysステートメント」と同様の機能で任意のキーを操作することができます。尚、「SendKeysステートメント」では操作が不能なWindowsキーの操作も可能です。
また、キーボードの状態を確認する必要があるので、「GetKeyboardState」も利用していきます。

上記の宣言は「keybd_event」「GetKeyboardState」を利用するためのものですので、利用する際はそのままコピーしてください。
次に定数の設定がされていますが、「VK_NUMLOCK = &H90」は「NumLock」キーを設定しています。
keybd_eventではキーを「押す」「放す」の処理を別々に指定しなければならないため、「KEYEVENTF_EXTENDEDKEY(押す)」「KEYEVENTF_KEYUP(放す)」を設定しています。


GetKeyboardState keys(0)

GetKeyboardState関数を呼び出す場合に、keys配列の先頭を引数として渡します。
キーの状態を正常にできた場合は0以外とできなかった場合は0を返します。


NumLockState = keys(VK_NUMLOCK)

NumLockState変数に「NumLock」キーを設定します。


If NumLockState <> True Then
 'キーを押す
 keybd_event VK_NUMLOCK, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0
 'キーを放す
 keybd_event VK_NUMLOCK, &H45, KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0
End If

「NumLock」キーがOFFの場合は、keybd_event関数で「NumLock」キーを押す→放すの処理をしてONにします。

これで認証が完了となります。
この後にクリック処理を入れても再度認証画面が表示されることはありませんので、操作することが可能です。「ieBasic」「ieBasic2」サブルーチンどちらを利用しても大丈夫ですので、用途に合わせてご利用ください。

次の記事: VBAでIE操作に役立つIEのバージョンチェック >>

Excel VBAでIEを思いのままに操作できるプログラミング術 Excel 2013/2010/2007/2003対応

近田 伸矢, 植木 悠二, 上田 寛

IEのデータ収集&自動操作のプログラミング本はこの1冊だけ!IEの起動やポップアップウィンドウ、表示を制御する基本的なコードはもちろん、テキストボックスやラジオボタン、表、ハイパーリンクなどのHTML部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。

VBAのIE制御についてのQ&A掲示板

↑エクセルVBAのIE(InternetExplorer)操作で分からない事があればこちらの掲示板よりご質問ください^^

ExcelのVBA初心者入門

↑こちらはExcelのVBAをマスターできるよう初心者向けのエクセルVBA入門コンテンツになります^^

VBAのIE制御入門RSS

RSSフィードを登録すると最新記事を受け取ることができます。

VBAIE操作のスカイプレッスン

VBAでIE(InternetExplorer)制御の準備

【ダウンロード】IE操作に便利なツール

こちらでは、これまでに紹介したIE(InternetExplorer)操作で便利な機能をツール化しています。無償でダウンロードできますので、目的に合わせたご利用ください。

IEオブジェクトのメソッド・プロパティ

こちらでは、IE(InternetExplorer)オブジェクトのメソッド・プロパティをまとめています。

IE操作に利用されているVBA関数

こちらでは、エクセルVBAのIE(InternetExplorer)操作で利用されたVBA関数をまとめています。

IE操作に利用されているステートメント

こちらでは、エクセルVBAのIE(InternetExplorer)操作で利用されたステートメントをまとめています。ExcelのVBAで基本的な部分になりますので、しっかり理解しましょう。

IE(InternetExplorer)制御のVBAコード

こちらでは、これまでに作成したIE(InternetExplorer)操作で役立つサブルーチンをまとめています。
全てをコピーする必要はありませんが、目的に合わせたサブルーチンをご利用ください。

ExcelのVBAで作成した役立つVBAコード

こちらでは、IE(InternetExplorer)制御の利用だけでなく、Excel全般で利用できるVBAコードです。エクセルVBAで役に立つものばかりですので、ご利用ください。