[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『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 >
(*) 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
>'出勤ボタンクリック >'☆ここでエラー表示になります >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.