[[20211203223311]] 『Excel VBA からIEログイン後ボタンクリック』(is) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『Excel VBA からIEログイン後ボタンクリック』(is)

タイトルの通りです。
専用サイトにログインしその後ボタンをクリックさせたいのですが
「実行時エラー 91 オブジェクト変数またはwithブロック変数がせっていされていません」となってしまいます。
ログイン後のhtmlドキュメントが取れていないのか
ソースを見るとhtmlタグが複数あるのでそれのせいなのか
素人がネットから勉強し作成してあるのでお助け頂けないでしょうか。
よろしくお願いします。

作成マクロは以下の通りです。

    Dim objIE As InternetExplorer
    Set objIE = New InternetExplorer

    objIE.Visible = True 'IEを表示

    objIE.navigate "@@@@@@@@@@@@@@@@@@@"

    Call WaitIE(objIE)

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

htmlDoc.getElementById("TxtUser").Value = "1234" 'ユーザーネーム
htmlDoc.getElementById("TxtPass").Value = "123456789" 'パスワード
htmlDoc.getElementById("BtnLogin").Click 'ログイン

Set htmlDoc = Nothing 'ログインページのHTMLをいったん破棄

Call WaitIE(objIE) '画面遷移の待機

Set htmlDoc = objIE.document 'ログイン後のページのHTMLを読み込む

'出勤ボタンクリック
’☆ここでエラー表示になります
htmlDoc.getElementById("BtnSyukkin").Click

End Sub

Sub WaitIE(objIE As InternetExplorer)

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

End Sub

< 使用 Excel:Excel2016、使用 OS:Windows10 >


あてずっぽう
Call WaitIE(objIE)は2回出てくるこれをコメントアウトしてみる
Set htmlDoc = Nothing 'ログインページのHTMLをいったん破棄 これをコメントアウトしてみる

(*) 2021/12/04(土) 09:55


 >Set htmlDoc = objIE.document 'ログイン後のページのHTMLを読み込む
 >'出勤ボタンクリック
 >’☆ここでエラー表示になります
 >htmlDoc.getElementById("BtnSyukkin").Click

 1.htmlDocオブジェクトは実際に取得できているのですか? 
  ローカルウィンドウで確かめましたか?

 2.BtnSyukkinのIDがあるタグは存在しているのですか?
  実際のWebページで確かめましたか?

(半平太) 2021/12/04(土) 11:33


1 取得したオブジェクトがローカルウインドウで確認できることを知りませんでした確認してみたいと思   
  います。
  あれから少し自分で調べたのですがインナーフレーム中にBtnSyukkinのIDが存在することでできないのかと考えております。
2 BtnSyukkinのIDがあるタグは存在は確認しております。
(is) 2021/12/04(土) 22:03

 >'出勤ボタンクリック
 >'☆ここでエラー表示になります
 >htmlDoc.getElementById("BtnSyukkin").Click

 ↑ここだと思うソースコードを掲示されてみてはどうでしょうか?
 特定したい要素の属性が…何なのか解らないとアドバイスが難しいと思いますよ。

 下記のサイトを参考に、要素の属性を...要素の検査か、検証があると思うのでそこのコードを掲示されたら
 アドバイスがあるかもです。
 参考 : https://nujonoa.com/vba-ie-getelements/

 ヤフー( 検索ボックス )の場合は、↓こうだけど
 <input type="search" class="_1wsoZ5fswvzAoNYvIJgrU4" name="p" autocomplete="off" aria- label="検索したいキーワードを入力してください" aria-live="assertive">

 エクセルの学校の場合に("質問掲示板"をクリックするとして)…それは↓こうなので
 <a href="https://www.excel.studio-kazu.jp/cgi-bin/kazuwiki2r.cgi?mycmd=recent">質問掲示板</a>

 エクセルの学校のトップページを表示後に("質問掲示板")をクリックさせるサンプルコードは
 ↓こんなかんじですかね? 参照設定と、APIでSleep入れて…お馴染みのFor Eachで回します。( あくまで私は、の話です。 )
 コードは即興なので参考程度で願います。

 Option Explicit
 '参照設定 MIcrosoft HTML Object Library / Microsoft Internet Controls
 #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

 Dim objIE As InternetExplorer
 Dim objTag As Object

 Sub IE_Sample()

    Set objIE = CreateObject("InternetExplorer.Application")
    objIE.Visible = True ' IE表示
    Call ieNavi(objIE, "https://www.excel.studio-kazu.jp/") '' IE起動 '' 完全読込待機処理サブルーチン

    Dim 質問掲示板 As String
    For Each objTag In objIE.Document.getElementsByTagName("a")
            If InStr(objTag.outerHTML, "質問掲示板") > 0 Then
                    objTag.Click
                    Exit For
            End If
    Next

 End Sub

 Sub ieCheck(objIE As InternetExplorer)

    On Error GoTo Err
    Do While objIE.Busy = True Or objIE.ReadyState <> READYSTATE_COMPLETE
            DoEvents
            Sleep 100
    Loop
    Exit Sub
 Err:
        MsgBox " Error が発生しました。" _
        , vbInformation + vbOKOnly, Err.Description
    Err.Clear
    End

 End Sub

 Sub ieNavi(objIE As InternetExplorer, urlName As String)
    objIE.Navigate urlName        '' 指定したURLをIE(InternetExplorer)で表示
    Call ieCheck(objIE)           '' IE(InternetExplorer)が完全表示されるまで待機
 End Sub

 ※基本的なコードの流れは(is)さんと一緒なので
 気になるのは↓ここだけです。

 htmlDoc.getElementById("BtnSyukkin").Click

 あ、あと読込待機時点で...("BtnSyukkin").Clickをしに行ってないかくらいでしょうか?
 あ、あと私は詳しくないのでデタラメ言ってるかも知れませんが…返信が無いと
 IE操作の得意な方の目に留まらないので…応援です。笑

(あみな) 2021/12/05(日) 23:54


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.