アプリ版:「スタンプのみでお礼する」機能のリリースについて

vba IE操作で こういう事ってできないのでしょうか?

Dim objIE As InternetExplorer
Sub test()
Dim myObj As Object
Dim myStr As String

Set objIE = CreateObject("InternetExplorer.Application")

objIE.Navigate "http://employment.en-japan.com/search/search_lis …
objIE.Visible = True

Call iewait

For Each myObj In objIE.Document.all.tags("a")

If myObj.outerText = "詳細を見る" Then
myObj.Click
Call iewait
Debug.Print objIE.LocationName
objIE.GoBack
Call iewait
End If
Next

objIE.Quit
Set objIE = Nothing
End Sub
Sub iewait()
Const READYSTATE_COMPLETE As Long = 4

Do Until objIE.ReadyState = READYSTATE_COMPLETE
Loop

Do While objIE.Busy = True
DoEvents
Loop
End Sub

このコードを実行して、
1ページ目の「詳細を見る」をクリックして、2ページ目のタイトルを抜き出し
1ページ目に戻り、次の「詳細を見る」をクリックして、2ページ目のタイトルを抜き出し・・・
と言う処理を繰り返したいのですが、
1回目のmyObj.Clickを通った後(Call iewaitの後かも?)に、
myObjの値が変数なしになってしまい、
2回目のIf myObj.outerText = "詳細を見る" Thenで
書き込みできません。(Error 70)
になります。

1ページ目のリンクをクリックして、戻って
また1ページ目のリンクをクリックして・・・
と言う処理をしたい場合どうすればよろしいでしょうか?

A 回答 (3件)

>No.1 この回答へのお礼


aタグをLoopにかけてみました。

Dim i As Long
With objIE
For i = 0 To .document.all.tags("a").Length - 1
If .document.all.tags("a")(i).innerText = "詳細を見る" Then
.document.all.tags("a")(i).Click
Call iewait
Debug.Print i & ":" & .LocationName
.GoBack
Call iewait
End If
Next i
End With
    • good
    • 1
この回答へのお礼

For Eachではなくfornextでループしちゃえばいいのですね。
うまく出来ました。

有難うございます。

お礼日時:2013/03/25 19:40

myCnt1 = 0


myCnt2 = 0
Do
____For Each myObj In objIE.Document.all.tags("a")
________If myObj.outerText = "詳細を見る" Then
____________myCnt2 = myCnt2 + 1
____________If myCnt2 > myCnt1 Then
________________myCnt1 = myCnt2
________________myCnt2 = 0
________________myObj.Click
________________Call iewait
________________objIE.GoBack
________________Call iewait
________________Exit For
____________End If
________End If
____Next
Loop
終了条件が足りないのでループしてますが
消えてしまうなら もう一度取得しなおす
同じものを処理しないように カウンターで判断
しています
    • good
    • 0
この回答へのお礼

カウンターを設けるのですね

お礼日時:2013/03/25 19:39

"詳細を見る"をClickしなくても取れるようです。



Dim txt1 As String, txt2 As String
For Each myObj In objIE.document.all.tags("table")
If myObj.className = "listSummary" Then
txt1 = myObj.all.tags("div")(1).innerText
txt2 = myObj.all.tags("a")(1).innerText
Debug.Print txt1 & "/" & txt2
End If
Next
    • good
    • 1
この回答へのお礼

やってみたら取れました。

ちなみに今回はこの方法で取得できたからいいのですが、
私の質問文のように、次のページへ行って戻って・・・をしたい場合は、
やはり無理ってことでしょうか?

お礼日時:2013/03/23 10:23

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!