質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Internet Explorer

Internet Explorer(IE;MSIE)はマイクロソフトが開発したウェブブラウザです。Microsoft Windowsに組み込まれています。

タグ

特殊な記法により文書に埋め込む形で記述される付加情報をタグと呼びます。文書構造や書式、文字飾りなどを指示したり、画像や他の文書へのリンクを埋め込むことができる。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

Q&A

解決済

1回答

3009閲覧

Excel VBA aタグのクリックが上手くいきません。ステップインでは作動するのですが・・・

hiro22

総合スコア1

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Internet Explorer

Internet Explorer(IE;MSIE)はマイクロソフトが開発したウェブブラウザです。Microsoft Windowsに組み込まれています。

タグ

特殊な記法により文書に埋め込む形で記述される付加情報をタグと呼びます。文書構造や書式、文字飾りなどを指示したり、画像や他の文書へのリンクを埋め込むことができる。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

0グッド

0クリップ

投稿2021/07/02 07:14

Excel VBAにて以下のコードでaタグをクリックしたいのですが、作動しません。
ステップインではFor~Nextのところで何度かループをして作動しますが、実行をクリックすると作動しなくなります。

実際のサイトは社内サイトのため控えさせていただきます。

原因がわかる方がいらっしゃいましたら、ご教授下さいませ。

宜しくお願い致します。

Sub 来店予約()

Dim objIE As InternetExplorer Set objIE = New InternetExplorer objIE.Visible = True objIE.navigate "社内サイトURL" '管理画面ページのURLを指定 Call WaitIE(objIE) Dim htmlDoc As HTMLDocument Set htmlDoc = objIE.document htmlDoc.getElementById("btnLogin").Click Call WaitIE(objIE) htmlDoc.getElementById("focus").Value = "" 'ユーザー名を指定 objIE.document.getElementsByName("lpw")(0).Value = "" htmlDoc.getElementById("btnLogin").Click Set htmlDoc = Nothing 'ログインページのHTMLをいったん破棄 Call WaitIE(objIE) '画面遷移の待機 Set htmlDoc = objIE.document 'ログイン後のページのHTMLを読み込む '変数を定義

Dim ieDoc As HTMLDocument
Dim obj As Object

'HTML型ドキュメントに収録する
Set ieDoc = objIE.document

For Each obj In ieDoc.getElementsByTagName("a")
If obj.innerText = "予約者情報検索" Then
obj.Click
Exit For
End If
Next

'該当のWebサイトが表示されるのを待つ
While objIE.Busy Or objIE.readyState <> READYSTATE_COMPLETE
DoEvents
Wend

'オブジェクト参照を解除
Set ieDoc = Nothing
Set objIE = Nothing

End Sub

Sub WaitIE(objIE As InternetExplorer)

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

End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jinoji

2021/07/02 13:55

とりあえず、Forループの中や前後にDebug.Print入れてみるとかしてみたらどうでしょう。
tosi

2021/07/06 08:24 編集

htmlDoc.getElementById("btnLogin").Click の後の処理が完了していない為ではないでしょうか。 msgboxで一旦停止して、動くようであればその可能性高いです。 DoEventsや下記の様にobjIEの再取得を、実行前にして見たら如何でしょうか。(IE系は試験環境がないので憶測ですが) https://vba-create.jp/vba-ie-shell-set-objie/
TAJ_242

2021/07/07 02:47

対象のaタグのHTMLは公開できないでしょうか??
hiro22

2021/07/07 03:01

皆様、ご回答ありがとうございます。 明日、確認する時間が確保出来そうなので、ご回答頂いた対処法を実践してみて結果を投稿してみます。
hiro22

2021/07/07 03:02

対象のaタグのHTMLも明日公開します。
hiro22

2021/07/08 11:14

対象のaタグは以下の通りです。 <a href="/ReserveForm/reserveC/Subscriber/Search.aspx">予約者情報検索</a>
hiro22

2021/07/08 11:22

ステップインで実行すると以下のコード部分を4回ほど繰り返すことでaタグがクリックされます。 If obj.innerText = "予約者情報検索" Then obj.Click Exit For End If Next
hiro22

2021/07/08 11:45

tosiさんの仰る通り、Set ieDoc = objIE.document と For Each obj In ieDoc.getElementsByTagName("a") の間にmsgboxを入れると作動しましたが、msgboxを消して同じ場所にDoEventsを入れると作動しません。 当方初心者のため、申し訳ございませんが詳しく教えて頂けますでしょうか。
TAJ_242

2021/07/08 13:49 編集

aタグの確認ありがとうございます! 何度もすみませんが、id="btnLogin"の部分のHTMLも見せて頂けますでしょうか???
guest

回答1

0

ベストアンサー

明確な回答ではありませんが、追記で書きましたobjIEの再取得の方法を記載させて頂きます。こちらで安定する事はありませんでしょうか。
https://vba-create.jp/vba-ie-shell-set-objie/
参照設定:Microsoft Shell Controls And Automation

VBA

1 Dim objIE As InternetExplorer 2 Set objIE = New InternetExplorer 3 '(追記) 4 Dim winshell As Shell 5 Dim win As WebBrowser 6 Set winshell = CreateObject("Shell.Application") 78910 '(追記)オブジェクト再取得 11 DoEvents 12 Set objIE = Nothing 13 For Each win In winshell.Windows 14    '(-動作確認-) 15 Debug.Print "---> " & win.Name 16 If win.Name = "Internet Explorer" Then 17 Set objIE = win 18 Exit For 19 End If 20 Next 21 22 '変数を定義 23 Dim ieDoc As HTMLDocument 24 Dim obj As Object 25 26 'HTML型ドキュメントに収録する 27 Set ieDoc = objIE.document 28 29 For Each obj In ieDoc.getElementsByTagName("a") 30 If obj.innerText = "予約者情報検索" Then 31 obj.Click 32 Exit For 33 End If 34 Next 353637

p.s.追記・修正でも書きましたが、IE起動のVBA動作はHPソース/サーバーが違うために、環境が無い為に試験が出来ず確実な回答は出来ません。その為に、参考程度となるかも知れません。

投稿2021/07/09 00:48

tosi

総合スコア553

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hiro22

2021/07/11 09:49

ご回答いただいたものとは少々異なりますが、再取得・再読み込みをすることで作動しました。 原因を明らかにしていただき、ご丁寧な回答をありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問