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

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

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

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

Internet Explorer

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

829閲覧

VBAでIE操作 - フレームページのaタグをクリック

koyamashinji

総合スコア45

VBA

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

Internet Explorer

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2020/06/04 06:16

編集2020/06/04 08:53

VBA超初心者です。

親ページにある2つ目のフレームページの、
1つ目のaタグのリンクをクリックするコードを作成しましたが
====の中のloop ~ Wend の無限ループに
陥ってしまいます。

親ページと子ページの読み込みについて
100%理解できてないので、コードのおかしいところがあれば
ご指摘いただきたく。

ちなみに、
下記コードの ■ 時点では、正しい情報が出力されます。

Option Explicit Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Sub FramesTest () Dim i As Integer Dim ie As InternetExplorer Dim HTMLDoc As HTMLDocument Dim HTMLFrameDoc As HTMLDocument Set ie = New InternetExplorerMedium ie.Visible = True ie.navigate "社内イントラサイトURL"  Do While ie.Busy = True Or ie.readyState <> READYSTATE_COMPLETE DoEvents Loop Sleep 1000 Set HTMLDoc = ie.document Debug.Print HTMLDoc.frames.Length ■ ====== If HTMLDoc.frames.Length > 0 Then For i = 0 To HTMLDoc.frames.Length - 1 ' On Error Resume Next Set HTMLFrameDoc = HTMLDoc.frames(i).document ' On Error GoTo 0 If Not HTMLFrameDoc Is Nothing Then While HTMLFrameDoc.readyState <> "complete" DoEvents Wend End If Next i End If ====== Debug.Print HTMLDoc.frames(1).document.getElementsByTagName("a")(0)  HTMLDoc.frames(1).document.getElementsByTagName("a")(0).Click End Sub

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

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

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

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

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

kenshirou

2020/06/04 07:31

例えば、HTMLDoc.frames(1).document.getElementsByTagName("a")(0)に該当するAタグにJavaScriptが仕込んである場合、それらの準備ができていない(読み込まれていない)とクリックが無反応になってしまうということも考えられますが、実際はどうなのでしょうか? ところで、 Debug.Print HTMLDoc.frames(1).document.getElementsByTagName("a")(0) では何が出力されるのでしょうか?
koyamashinji

2020/06/04 07:54

ご回答ありがとうございます。 ・当該Aタグは、<a class = "..." onclick="..." href="..." target="...">...</a>となっておりますがJavascriptが仕込んである場合はどのような記述の仕方がされているのでしょうか。 ・再度トライしておりましたが、先ほどから、Debug.PrintHTMLDoc.frames(1).document.getElementsByTagName("a")(0) で何も出力されなくなりました。 ステップイン実行すると、======内の処理で無限ループが発生しているようです...
kenshirou

2020/06/04 08:14

対象Aタグにonclick="..." というものがあるようなので、ここにJavaScriptが仕込まれている可能性がありますね。 ======内の処理で無限ループが発生しているとのことですが、おそらくWhile~Wendの無限ループですね。 ステップイン実行では、HTMLFrameDoc.readyStateの値はどうなっているでしょうか? (ずっと"interactive"のままとか?)
koyamashinji

2020/06/04 08:59

・onclickのあとは、=window.open('nowloading.html...のような記載があります。 ・ステップイン実行では、ローカルウインドウで確認したところ、HTMLFrameDoc.readyStateの値は"complete"になっております。
kenshirou

2020/06/05 00:16

・onclick="window.open('nowloading.html..."ですが、これは別のウィンドウ(名前からして「Now Loading」のようなものを表示?)を表示するJavaScriptです。 (実際にそのような動作になっているのでしょうか?) その後に、何か制御を行うための記載があるかも知れませんが、実際に見てみないと分かりません。 ・HTMLDoc.frames.Length(フレームの数)は実際にはいくつあるのでしょうか? すべてのHTMLDoc.framesコレクション内のフレームのreadyStateが"complete"になる必要があります。 それとも、While~Wendの外で無限ループが発生しているのでしょうか?
koyamashinji

2020/06/05 01:06

回答ありがとうございます。 If Not HTMLFrameDoc Is Nothing Then While HTMLFrameDoc.readyState <> "complete" DoEvents Wend の部分が、"Complete"と大文字の表記になっていたため、無限ループが発生していたことがわかりました。 このようなことで、お時間とらせてしまい、申し訳ありません。 いろいろと教えていただき、大変勉強になりました。 (プログラミングに求められる緻密さを, 改めて痛感しております...)
guest

回答1

0

ベストアンサー

例えば、aタグ要素のclick()を実行したけどページが切り替わらない、ということを検出可能であれば、Click()のリトライ(場合によっては対象aタグ要素のあるフレームのリロード)を考えた方が早いかも知れません。

投稿2020/06/05 02:32

kenshirou

総合スコア772

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問