http://q.hatena.ne.jp/1251504373
の質問に、
またまた、調子に乗って回答したけど、
なんか、うまくソースを貼れなかった。
<pre>と</pre> で囲ったんだけど、、、
日記に同じように <pre>と</pre> でソースをはると、
Sub Link情報を取得する()
'次へのボタンを押す。Dim objIE As Object
Dim strURL As String
Dim strNEXT As String '次に表示するURL
Dim i As Integer
Dim nYLINE As Integer'IEのオブジェクトを作成する
Set objIE = CreateObject("InternetExplorer.application")
objIE.Visible = True
'初期ページを代入
strNEXT = "http://okwave.jp/212/423/c450.html" 'URL代入
nYLINE = 10 '10行目からせっとするので
While strNEXT <> "" '次のURLが入っている間まわる
'ページを開く(.Navigateで表示する。)
objIE.Navigate strNEXT 'アドレスを渡し表示する
'読み込み完了となるまで、ループする。
While objIE.ReadyState <> 4 Or objIE.Busy
DoEvents
Wend
'↑これだと、広告画像の表示を待つから、クールじゃないなぁ。
''リンクを探す
'リンク数分まわす A列にアンカーテキスト B列にURLを書く
strNEXT = "" '次のURLを初期化
'上の次へがくるまで、空読み。
For i = 0 To objIE.Document.Links.Length - 1
'次へが見つかったら、抜ける※ここから下に質問があるので、、、、
If Left(objIE.Document.Links(i).innerText, 2) = "次へ" Then 'テキストが 次へ
strNEXT = objIE.Document.Links(i).href 'URL(次へ)を代入
Exit For 'ループを抜ける
End If
'↑あっ、これだと、最後のページが取れないか、、、
Next i
For i = i + 1 To objIE.Document.Links.Length - 1
'セット条件を http://okwave.jp/qa があるか?にする。
If Left(objIE.Document.Links(i).href, 19) = "http://okwave.jp/qa" Then
Cells(nYLINE, "A") = "'" & objIE.Document.Links(i).innerText 'テキスト
Cells(nYLINE, "B") = objIE.Document.Links(i).href 'URL
nYLINE = nYLINE + 1 'セット位置を+1する
End If
'2回目の次へが見つかったら、強制的に抜ける※2回目の次へは質問よりしたなので、、
If Left(objIE.Document.Links(i).innerText, 2) = "次へ" Then 'テキストが 次へ
Exit For 'ループを抜ける
End If
Next i
Cells(nYLINE, "A").Select '普通イラナイケド、進行状況見たいので、、、
Wend
objIE.Quit 'IEを閉じるEnd Sub
少しは、まともになるのかなぁ??
まぁ、ソースの見た目がよくなっても、問題点はそのままだから、、、
最後のページは、まぁ、置いておいても、
新規投稿があったときに、データがズレてしまうのは、いただけないよね。
※最後に重複取ったり、次ページの頭のデータが前ページにあるか見ないとね。
まぁ、そのあたりは、うまくアレンジしてもらえるかなぁ・・・・
追伸: コメントランで便利な方法を教えていただきました。感謝ですね。
http://hatenadiary.g.hatena.ne.jp/keyword/ソースコードを色付けして記述する(シンタックス・ハイライト)
↑忘れないように、リンクを貼っておこう。次から、これ、つかうぞ。
※※回答を書き直せないのがイタイですね、、、
下記、
>|vb|
今回のソース
< |
で貼ってみた。
Sub Link情報を取得する() '次へのボタンを押す。 Dim objIE As Object Dim strURL As String Dim strNEXT As String '次に表示するURL Dim i As Integer Dim nYLINE As Integer 'IEのオブジェクトを作成する Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True '初期ページを代入 strNEXT = "http://okwave.jp/212/423/c450.html" 'URL代入 nYLINE = 10 '10行目からせっとするので While strNEXT <> "" '次のURLが入っている間まわる 'ページを開く(.Navigateで表示する。) objIE.Navigate strNEXT 'アドレスを渡し表示する '読み込み完了となるまで、ループする。 While objIE.ReadyState <> 4 Or objIE.Busy DoEvents Wend '↑これだと、広告画像の表示を待つから、クールじゃないなぁ。 ' 'リンクを探す 'リンク数分まわす A列にアンカーテキスト B列にURLを書く strNEXT = "" '次のURLを初期化 '上の次へがくるまで、空読み。 For i = 0 To objIE.Document.Links.Length - 1 '次へが見つかったら、抜ける※ここから下に質問があるので、、、、 If Left(objIE.Document.Links(i).innerText, 2) = "次へ" Then 'テキストが 次へ strNEXT = objIE.Document.Links(i).href 'URL(次へ)を代入 Exit For 'ループを抜ける End If '↑あっ、これだと、最後のページが取れないか、、、 Next i For i = i + 1 To objIE.Document.Links.Length - 1 'セット条件を http://okwave.jp/qa があるか?にする。 If Left(objIE.Document.Links(i).href, 19) = "http://okwave.jp/qa" Then Cells(nYLINE, "A") = "'" & objIE.Document.Links(i).innerText 'テキスト Cells(nYLINE, "B") = objIE.Document.Links(i).href 'URL nYLINE = nYLINE + 1 'セット位置を+1する End If '2回目の次へが見つかったら、強制的に抜ける※2回目の次へは質問よりしたなので、、 If Left(objIE.Document.Links(i).innerText, 2) = "次へ" Then 'テキストが 次へ Exit For 'ループを抜ける End If Next i Cells(nYLINE, "A").Select '普通イラナイケド、進行状況見たいので、、、 Wend objIE.Quit 'IEを閉じる End Sub
↑キレイで見やすいですね。※※※同じバグ付きのソースだけど、馬子にも衣装?
これから
>|vb|
vbaソース
< |
使わないとなぁ。