お世話になっております。
現在Pタグから値を取得することは出来ました。
しかし、
ステップイン実行だと正常に動作して、
プログラム全体で実行を行うとPタグの値を取得出来ない、
という状況になってしまいパニックになりました。
色々なサイトを見たのですが、
今回の原因はおそらく、Pタグの値を取得する前に次の処理を行っているのが、
原因かと思っています。
■質問の内容
上の処理が完了するまで下の処理を止めるというコードを書きたいのですが、
ご教示いただけないでしょうか。
■作成したコード
Sub test()
Dim searchx As String
Dim searchy As String
Dim all As String
Dim box() As String
Dim WebIE As InternetExplorer
'------------------------------------
'★セルの文字取得
searchx = Cells(1, 1)
searchy = Mid(Cells(1, 5), InStr(Cells(1, 5), "@") + 1, 20)
all = searchx + " " + searchy
'------------------------------------
'------------------------------------
'★変数webIEを使用してIE起動
Set WebIE = New InternetExplorer WebIE.Visible = True WebIE.Navigate "https://www.google.com/?hl=ja"
'------------------------------------
'------------------------------------ '★IEのリロード完了まで処理をしない While WebIE.Busy Or WebIE.readyState <> READYSTATE_COMPLETE DoEvents Wend '------------------------------------ On Error Resume Next '値がないとエラーが出るので、エラー回避用 '------------------------------------ '★値をWebで入力 Dim A As Object For Each A In WebIE.document.getElementsByTagName("INPUT") '①FOR EACH でINPUTをすべて抜き出す。 If A.name = "q" Then A.Value = all Next '------------------------------------ '------------------------------------ '★検索ボタンをクリック Dim b As Object For Each b In WebIE.document.getElementsByTagName("INPUT") '①FOR EACH でINPUTをすべて抜き出す。 If A.name = "btnk" Then b.Click While WebIE.Busy Or WebIE.readyState <> READYSTATE_COMPLETE DoEvents Wend Next '------------------------------------ '------------------------------------- '★指定したURLのみ取得 Dim i As Long Dim boxi As Long ReDim box(boxi) i = 5 boxi = 0 Dim htmlDoc As HTMLDocument Set htmlDoc = WebIE.document Dim anchor As HTMLAnchorElement For Each anchor In htmlDoc.Links If InStr(anchor, searchy) <> 0 And InStr(anchor, "google.com") = 0 Then box(boxi) = anchor 'Cells(i, 1).Value = anchor Else boxi = boxi - 1 i = i - 1 End If i = i + 1 boxi = boxi + 1 Next anchor '------------------------------------- WebIE.Quit Set WebIE = New InternetExplorer WebIE.Visible = True WebIE.Navigate2 box(0)
'------------------------------------
'------------------------------------ '★IEのリロード完了まで処理をしない While WebIE.Busy Or WebIE.readyState <> READYSTATE_COMPLETE DoEvents Wend '------------------------------------ Dim access As Object For Each access In WebIE.document.getElementsByTagName("a") '①FOR EACH でINPUTをすべて抜き出す。 If access.innerText = "テスト" Or access.innerText = "テスト1" Or access.innerText = "テスト2" Then While WebIE.Busy Or WebIE.readyState <> READYSTATE_COMPLETE DoEvents Wend access.Click Exit For End If Next Dim juusyo As Object Dim cntn As Long Dim change As String cntn = 5 For Each juusyo In WebIE.document.getElementsByTagName("p") If InStr(juusyo.innerText, "東京都") > 0 Then Cells(cntn, 1).Value = juusyo.innerText Else End If Next End Sub
回答1件
あなたの回答
tips
プレビュー