人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

ExcelのVBAで、Webサイトのあるリンクのリンク先の取得方法について追加質問致します。

【1】該当のページのURLは固定…なのですが、実はあるページから複数のプルダウンを選択し、
送信ボタンを押下した結果表示されます。
(ですので、この画面遷移を得ず直に閲覧先のページのURLを指定してしまうとエラー
ページになってしまいます。)
【2】この該当のページに貼られている2つのリンクのうち、1つめのリンク先URLを取得で
きればOKです。
【3】一定の選択肢で【1】の画面遷移から得られた該当ページであっても、【2】で得られ
る1つめのリンク先URLはランダム生成です。

このような条件なのですが、
・該当ページの情報を取得しにいくのではなく、IEでまさに該当ページが既に開いている状況
(まさに今ここです!)で、そこから該当情報をとりにいくVBA記述
・「複数のプルダウンを選択」→「送信」を加味した画面遷移後のURL指定方法
これらがVBAでできれば解決できそうと考えています。

どうぞよろしくお願い致します。









↓こちらの追加質問です。
http://q.hatena.ne.jp/1279613364

●質問者: yoshifuku
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:Excel IE URL VBA webサイト
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● SALINGER
●40ポイント ベストアンサー

IEの開いているページからソースを取得するように、前回のコードを変更しました。

Sub Sample2()
 Dim objShell As Object
 Dim objIE As Object
 Dim buf As String
 Dim stP As Long
 Dim edP As Long
 
 Set objShell = CreateObject("Shell.Application")
 For Each objIE In objShell.Windows
 If Right$(objIE.FullName, 12) = "iexplore.exe" Then
 buf = objIE.document.body.innerHTML
 
 stP = InStr(1, buf, "<a href=") + 9
 edP = InStr(stP, buf, ">") - 1
 
 MsgBox Mid(buf, stP, edP - stP)
 End If
 Next
End
◎質問者からの返答

ありがとうございます!

前回の記述はURL部分が上手く抜けたのですが、今回のはURLとは違うものが抜けてしまうようです。

http://www.yahoo.co.jp/

でやりました。

ここだけ直せれば・・・


2 ● ken3memo
●30ポイント

起動済みのIEを探して (テストで タイトルがはてな or URLにhatenaが含まれる)

リンク情報をデバック文字として出力してみました。

Option Explicit

Sub ie_test0721()
'CreateObject("Shell.Application") で
'通常のフォルダー表示ファイルエクスプローラーとIE(インターネットエクスプローラー)
'を.FullNameで区別する

 Dim objShell As Object
 Dim objIE As Object
 Dim n As Integer
 
  'これで、エクスプローラーのウインドウを取得する
 Set objShell = CreateObject("Shell.Application")
 
  '後ろから消してく。頭から、For n=0 To objShell.Windows.Count - 1 のループでもいいけど
  '.Windowsでエクスプローラーとインターネットエクスプローラーにさわれる
 For n = objShell.Windows.Count To 1 Step -1 'MAXから-1ひいてく感じで後ろからチェック
 Set objIE = objShell.Windows(n - 1) 'n番目のウインドウを代入 配列が0からなので-1補正
 Debug.Print n
 Debug.Print ".FullName " & objIE.FullName
 Debug.Print ".locationURL " & objIE.locationURL
 
  '.FullNameで普通のファイルエクスプローラーとIE(インターネットエクスプローラー)を区別する
 If Right(UCase(objIE.FullName), 12) = "IEXPLORE.EXE" Then 'IEか?
  'タイトルやURLで判断する
 Debug.Print "URL " & objIE.locationURL
 Debug.Print "URL " & objIE.Document.Title
 
  'タイトルがXXXXだったら テストではてなを指定
 If InStr(objIE.locationURL, "はてな") > 0 Then  'instrでタイトル文字を探したり
 Exit For '見つかったので、Exitでループ抜ける
 End If
 
  'URLがXXXXだったら テストで hatena を指定
 If InStr(objIE.locationURL, "hatena") > 0 Then 'URLに hatena があるか調べたり
 Exit For '見つかったので、Exitでループ抜ける
 End If
 End If
 Next
 Set objShell = Nothing

  '↑上で見つからなかった 判断
 If n = 0 Then 'ループを最後まで回ってしまった=見つからなかった n=0で判断
 MsgBox "タイトル や URL を開いている IEが見つかりません"
 Exit Sub 'テスト関数を抜ける・・・
 End If
 
  '見つかったので、IE上のリンクを操作する(値を取り出す)
  'テストで
 For n = 0 To objIE.Document.Links.Length - 1
 Debug.Print objIE.Document.Links(n).innerText  'アンカーテキスト
 Debug.Print objIE.Document.Links(n).href  'URL
 Next
 
  '本当に1番目のリンクでいいなら 配列が0からなのでLinks(0)かなぁ
 If MsgBox("リンク " & objIE.Document.Links(0).href & "をクリックしますか?", vbYesNo) = vbYes Then
 objIE.Document.Links(0).Click  '蛇足でクリックしてみた。
 End If
  '↑でも、ヘッダーで画像とかあると、一番目は違ったり
 
End Sub

手前味噌のページですが、 http://ken3-info.blog.ocn.ne.jp/objie/2009/09/urlie_785f.html を元に作成してみました。

バグや動作仕様の勘違いなどがあるかもしれませんが、試してみてください。

一部でも参考になるといいなぁ・・・と思いつつ、願いつつ、失礼します。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ