LoginSignup
2
7

More than 5 years have passed since last update.

ExcelVBAでIEからユーザID・パスワード(「*」でマスク)を入力してログインする

Last updated at Posted at 2018-02-27

前投稿した以下2つの記事の内容をミックスさせました。
Excelでパスワードを「*」で表示させる
ExcelVBAでIEからユーザID・パスワードを入力してログインする

シート1に以下のログインボタンがあります。
image.png

シート2に以下のログインボタンがあります。
image.png

同じマクロを使って、どちらでもログインできるように作りました。

VBAソースコード


Sub login()

    Dim objIE As InternetExplorer 'IEオブジェクトを準備
    Set objIE = CreateObject("Internetexplorer.Application") '新しいIEオブジェクトを作成してセット

    objIE.Visible = True 'IEを表示

    Dim strUrl As String '次ページのURL
    strUrl = "https://connpass.com/login/"

    objIE.navigate strUrl 'IEでURLを開く

    Do While objIE.Busy = True Or objIE.readyState < READYSTATE_COMPLETE '読み込み待ち

        DoEvents

    Loop

    Dim strUsername As String
    strUsername = GetUsername

    Dim strPassword As String
    strPassword = GetPassword


    Dim htmlDoc As HTMLDocument 'HTMLドキュメントオブジェクトを準備
    Set htmlDoc = objIE.document 'objIEで読み込まれているHTMLドキュメントをセット

    htmlDoc.getElementsByName("username")(0).Value = strUsername 'name="username"にユーザー名を入力
    htmlDoc.getElementsByName("password")(0).Value = strPassword  'name="password"にパスワードを入力
    htmlDoc.getElementById("login_form").submit  'フォームの内容を送信

End Sub

Function GetUsername() As String

    Dim username As String
    username = ActiveSheet.Range("C3").Value 'ユーザー名を取得する
    GetUsername = username

End Function

Function GetPassword() As String

    Dim password As String
    If Range("C4").Value = "" Then
        password = ActiveSheet.OLEObjects("TextBox3").Object.Value 'パスワードをテキストボックスから取得する
    Else
        password = Range("C4").Value  'パスワードをセルから取得する
    End If
    GetPassword = password

End Function

備忘録

ActiveXコントロールを使っているときは、OLEObjectを使うこと

テキストボックスからの値の取得方法を調べて、最初は「strPassword = TextBox3.Value」と書いていました。
すると「オブジェクトが必要です」というエラーに。
こちらとしてはオブジェクトあるじゃん・・と思いながら。
しかしActiveXコントロールのオブジェクトは取得方法が違うようです。

各 OLEObject オブジェクトは、ActiveX コントロール、リンクされた OLE オブジェクト、または埋め込まれている OLE オブジェクトを表します。

OLEObjects オブジェクト (Excel)より

★ActiveXコントロールを使っているときは、OLEObjectを使うこと

戻り値を返すメソッドには、Functionプロシージャを使うこと

今回ユーザーネームを取得するところとパスワードを取得するところを、外に出してみました。
しかしなかなかうまくいかないのは、「Subプロシージャ」と「Functionプロシージャ」の違いを分かっていなかったからでした。

Subプロシージャ:戻り値がない
Functionプロシージャ:戻り値を返せる

【VBA】Sub/Functionプロシージャの違いと使い方【Excelマクロ】より

最初はSubプロシージャで書いていたため、戻り値を受け取れていなかったようです。

★戻り値を返すメソッドには、Functionプロシージャを使うこと

2
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
7