IEのURLのタイトルを取得方法について

このQ&Aのポイント
  • 現在開いている全てのIEのURLのタイトルを取得する方法について教えてください。
  • VBAを使用して、開いている全てのIEウィンドウのURLのタイトルを取得する方法について質問です。
  • 指定されたコードでエラーが発生する場合としない場合があるのですが、その違いとエラーの意味について教えてください。
回答を見る
  • ベストアンサー

現在開いている全てのIEのURLのタイトルを取得し

現在開いている全てのIEのURLのタイトルを取得したいのですが Sub test() Dim shl As Object Dim wnd As Object Dim doc As Object Dim frg As Boolean Set shl = CreateObject("Shell.Application") For Each wnd In shl.Windows() If TypeName(wnd.Document) = "HTMLDocument" Then Set doc = wnd.Document Debug.Print doc.Title Set doc = Nothing End If Next Set shl = Nothing End Sub このコードが If TypeName(wnd.Document) = "HTMLDocument" Then でエラーになる時とならない時があります。 エラーになる時は、 実行時エラー -2147467259 ’Document’メソッドは失敗しました:'IWebBrowser2'オブジェクト となります。 エラーが発生する時としない時の違いが分かりません。 そもそもどういう意味のエラーでしょうか? IE11、オフィス2010です。

質問者が選んだベストアンサー

  • ベストアンサー
  • kumatti1
  • ベストアンサー率60% (73/121)
回答No.1

>If TypeName(wnd.Document) = "HTMLDocument" Then FullNameプロパティの方で判定されるとか。 If Dir$(wnd.FullName) = "iexplore.exe" Then

vdvxhvzfnck
質問者

お礼

回答ありがとうございました。

関連するQ&A

  • 現在開いてるIEのタイトルを取得するには?

    Sub test() Dim shl As Object Dim wnd As Object Set shl = CreateObject("Shell.Application") For Each wnd In shl.Windows() Debug.Print wnd.LocationURL Next Set shl = Nothing End Sub ----------------------------------------- これを実行するとIEのURLは取得できますが 画像のようにタイトル部分の文字列を取得したいです。 LocationURLをLocationnameに変えたらエラーになりました。 ご教授よろしくお願いします。

  • VBのコードが理解できません 解説いただけないでしょうか?

    Dim ObjIE As Object Dim ObjShell As Object Dim ObjWindow As Object Dim WinExist As Boolean WinExist = False Set ObjShell = CreateObject("Shell.Application") For Each ObjWindow In ObjShell.Windows If TypeName(ObjWindow.Document) = "HTMLDocument" Then  WinExist = True  Set ObjIE = ObjWindow End If Next Set ObjShell = Nothing If Not WinExist = True Then Set ObjIE = CreateObject("InternetExplorer.Application") End If ObjIE.Navigate "http://nantokakantoka.html" ObjIE.Visible = True このコードを解説いただけないでしょうか? 特に WinExist For Each ObjWindow In ObjShell.Windows If TypeName(ObjWindow.Document) = "HTMLDocument" Then が何をしているのか分からないんです。

  • VBAで起動しているIEの操作

    IEでOKWAVEを開いていたら イミディエイトウィンドウに タイトルを表示するのに 次の 記述をしましたが エラーになりました。 実行時エラー '-2147467259 (80004005)': 'Document' メソッドは失敗しました: 'IWebBrowser2' オブジェクト なぜでしょうか? IEは11です。 エクセルは2013 OSは windows7 ホームプレミアム vbsは次の通り Sub okwave() Dim colSh As Object Dim win As Object Dim strTemp As String Dim objIE As Object Set colSh = CreateObject("Shell.Application") For Each win In colSh.Windows If TypeName(win.document) = "HTMLDocument" Then If InStr(win.document.Title, "okwave") > 0 Then Set objIE = win Exit For End If End If Next Debug.Print objIE.document.Title End Sub

  • Shell.ApplicationでのIEオブジェ

    目的のタブページのオブジェクトを取得することに成功したのですが、質問があります。 コードはVBSで書いています。 Dim objIE Set Shell=Wscript.CreateObject("Shell.Application") for each tmp in Shell.Windows if TypeName(tmp.document)="HTMLDocument" then'HTMLDocumentかつ if tmp.document.title="Google" then'そのページのタイトルが「Google」なら set objIE=tmp'代入 end if end if Next if objIE="" then WScript.Echo("目的のページが表示されてないっぽいです") WScript.Quit end if 'この時点で、objIEがその目的のページでのオブジェクト ここで、 objIE.alert("hoge")とできないのはどうしてなのでしょうか? alertはjavascriptの関数?だからですか?? でも、objIE.document.write("hoge")で、documentオブジェクトが使えるのはどうしてなんですか? documentオブジェクトはjavascirptのオブジェクトじゃないんですか? それともう1つ、上記コードの場合ですが、JSの場合 Shell.Windows.item(0)というので参照?できるっぽいですが、itemというメソッドはjavascirptだけのものなのでしょうか?vbsでは使えないのですか?何故なんですか?同じcomオブジェクトを参照してるんじゃないんですか?(?) どのオブジェクトがどれで、どのメソッドがどれなのかわからなくなります。 あと1つだけ! 上記コードでの、tmp.documentとはなんなのでしょうか?HTMLDocumentとは・・w 頭が混乱してます。どなたか回答よろしくお願いいたします。

  • VBAで、デバッグをお願いします。

    作りたいプログラムはpartsno_01から、partsno_20までのテキストボックスに、エクセルのセルA1から、A20までにある製品番号を入力し、データをsubmitするものです。 Sub pn() Dim ObjIE As Object Dim ObjShell As Object Dim ObjWindow As Object Dim WinExist As Boolean WinExist = False Set ObjShell = CreateObject("Shell.Application") For Each ObjWindow In ObjShell.Windows If TypeName(ObjWindow.document) = "HTMLDocument" Then WinExist = True Set ObjIE = ObjWindow End If Next Set ObjShell = Nothing If Not WinExist = True Then MsgBox "製品番号検索を開いてください。" Exit Sub End If ObjIE.Visible = True Do While i < 21 i = 1 Set elements = ObjIE.document.getElementsByName("partsno_0" & "i") If elements Is Nothing Then Exit Sub End If elements.Item(0).Value = Worksheets(1).Cells(i, 1).Value i = i + 1 Loop End Sub で、 elements.Item(0).Value = Worksheets(1).Cells(1, 1).Value が常にエラーになります。 間違っていはいないと思うんですが・・・・。 何がいけないのでしょうか。

  • Internet Explorerの起動状態をチェック

    IEが起動中の時はそれを使い、未起動の場合は新規に作成する、、、というのがしたくて次のようなコードをつくってみました。 ところが、 Set myIE = myShellwindows のところでエラーになります。 これを防ぐにはどのようにするといいのでしょうか? Sub Set_IE() Dim myIE As Object Dim myShellwindows As Object Dim myObject As Object Dim Flag As Boolean Set myShellwindows = CreatmyObject("Shell.Application").Windows() Flag = False For Each myObject In myShellwindows If TypeName(myObject) = "IWebBrowser2" Then Flag = True Exit For End If Next If Flag = True Then Set myIE = myShellwindows Else Set myIE = CreatmyObject("InternetExplorer.application") myIE.Visible = True End If Set myShellwindows = Nothing Set myIE = Nothing End Sub

  • 起動しているIEをVBSで閉じるときの問題・・・

    VBスクリプトで起動しているIEを探し特定のサイトであればウィンドウを閉じたいのですがどのようにすればよいのでしょうか? Dim ObjIE Dim ObjShell Dim ObjWindow Dim WinExist WinExist = False Set ObjShell = CreateObject("Shell.Application") For Each ObjWindow In ObjShell.Windows If TypeName(ObjWindow.Document) = "HTMLDocument" Then WinExist = True Set ObjIE = ObjWindow End If Next Set ObjShell = Nothing If Not WinExist = True Then Set ObjIE = CreateObject("InternetExplorer.Application") End If If objIE.Document.URL = "http://www.yahoo.co.jp/" Then objIE.quit End If If objIE.Document.URL = "http://www.excite.co.jp/" Then objIE.quit End If If objIE.Document.URL = "http://www.google.co.jp/" Then ?????????? End If ・ ・ ・ 例えばディスプレイ上にYahoo、Excite、Googleのホームページがそれぞれ立ち上がっていたとします。 もしYahooがあれば閉じて次にExciteを探しあれば閉じて、次にGoogleのページがあればそのままにし後の処理を行わず終わらせたいのですが・・・もしGoogleが開いていればこれ以降の処理を全てすっ飛ばして終了にしたいのですが・・・ また、If thenを繰り返してばかりで汚いコードのような気もします。 これをやっていてYahoo、Excite、Google全て開いていた場合何故かエラーが出て終了してしまいます。 どなたかいい方法があれば教えて下さい。

  • ie操作 フレームのURLがあってるか取得したい

    http://okwave.jp/qa/q8135136.html こちらのANo.2様のご意見を参考に、フレーム操作について調べているのですが、 サンプルを作ってみたのですが、うまくできません。 サンプルの内容としては、URLの中のフレームのオブジェクトを変数に格納し、 その格納したオブジェクトのURLをメッセージボックスに表示し、 欲しいURLかどうかを目視で確認したいのですが Dim objIE As InternetExplorer Sub Sample001() Dim myObj As Object Dim objFr As Object Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.navigate "http://masaboo.cside.com/new_html1/ht_sun/frame02.htm" Stop Set objFr = objIE.document.frames.Item(1) MsgBox objFr.document.frames.LocationURL Set objIE = Nothing End Sub MsgBox objFr.document.frames.LocationURL だと、実行時エラー438になります。 MsgBox objFr.document.LocationURLもMsgBox objFr.LocationURLもダメでした。 私は何か根本的に勘違いをしているような気がしますが、格納したフレームのURLを表示する方法があれば教えてください。 ご教授よろしくお願いします。

  • VBS 既に開いているIEを操作

    以下のコードで既に開いているIEをアクティブ化しています。 Dim objIE set Shell=Wscript.CreateObject("Shell.Application") for each tmp in Shell.Windows if TypeName(tmp.document)="HTMLDocument" then if tmp.LocationURL="指定URL" then set objIE=tmp end if end if Next 指定URLの部分を完全に一致していた場合ではなく、一部が一致していたら、そのIEをアクティブ化するようにしたいです。可能ならば方法を教えて欲しいです。

  • URLからタイトルを取得したい!

    エクセルのA列にはURLがずらっとあり、B列にタイトル取得を考えています。 そこで、他の質問者さんのコードを試しました。 その結果、普通のサイトでは問題なく取得できたのですが、 アメーバーブログなどの無料ブログでは、途中で止まってエラーとなってしまうようです。 どこかいけないのでしょうか? Public Sub ReadTitle() Dim url As Range Dim Http, buf As String Set Http = CreateObject("MSXML2.XMLHTTP") Set url = Range("A1") Do While (url.Value <> "") Http.Open "GET", url.Value, False Http.Send buf = StrConv(Http.ResponseBody, vbUnicode) 'msgbox buf url.Offset(0, 1).Value = getTitle(buf) Set url = url.Offset(1, 0) Loop Set Http = Nothing End Sub Private Function getTitle(buf As String) As String Dim pos1 As Long, pos2 As Long pos1 = InStr(1, buf, "<title>") If pos1 = 0 Then pos1 = InStr(1, buf, "<TITLE>") If pos1 = 0 Then getTitle = "" Exit Function Else pos2 = InStr(pos1 + 7, buf, "</TITLE>") End If Else pos2 = InStr(pos1 + 7, buf, "</title>") End If getTitle = Mid(buf, pos1 + 7, pos2 - pos1 - 7) End Function

専門家に質問してみよう