• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:webページのみのURLを取得したい)

webページのURLを取得する方法

このQ&Aのポイント
  • 「Sub testa()」のVBAコードを実行することで、アクティブなウェブページのURLを取得できます。ただし、フォルダのパスも含まれてしまう場合があります。
  • 正規表現を使用して、URLの末尾が「.html」で終わるかどうかをチェックすることで、ウェブページのみのURLを取得することができます。
  • ただし、一部のウェブページは「.html」で終わらないため、正確なURLを取得するには別の方法を試す必要があります。

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

  • ベストアンサー
  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.2

#1 DOUGLAS_ です。 >ウォッチウインドウを見るとoutlookの時はnameがないようなのですが >こういう場合どうやって回避すればいいのでしょうか? >Nameではなく >LocationName に >「LocationName = "outlook:%26」  ぉぉ!  そこまでお解りなのでしたら、私が、なぜウォッチウィンドウの画像を載せたかがお解りでしょう。  別に If objIE.Name = "Windows Internet Explorer" Then に限ったことではありません。  「全てのオブジェクトが持っているプロパティ」で、しかも、「IEが他のオブジェクトと必ず違う、特定の値を持って」いれば、「プロパティ」は「name」だろうが「LocationName」だろうが何でも構いません。  むしろ、こうしてエラーが出るたびに、変えることによって、より汎用性の高いコードになるということです。 For Each objIE In CreateObject("Shell.Application").Windows の後にでも Debug.Print objIE.LocationURL Debug.Print objIE.~~ を入れて「~~」のところにいろんなプロパティをはめ込んでみれば、イミディエイトウィンドウに吐き出された値を検証することによって、何が良いかが分かります。

ngiajeqgi4
質問者

お礼

ウォッチウィンドウはこうやって使って行くのですね。 しかしなぜか今日同じコードを実行したらアウトルックのウインドウは取得されず、 最初にご提示いただいた方法で解決できました。(ラッキー?) しかしまたアウトルックが取得されてしまうかもしれないので LocationNameでアウトルックをはじくIFステートメントを入れておきます。 再度ご回答いただきありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.1

myStr = myStr & vbCrLf & objIE.LocationURL を If objIE.Name = "Windows Internet Explorer" Then と End If で挟んでください。 CreateObject("Shell.Application").Windows は「IE」と「(普通の)エクスプローラ」の両方を扱うオブジェクトです。  VBE(Visual Basic Editor)で「objIE」をウオッチ式に追加し、 ウオッチウィンドウで比較してください。  「IEの場合」と「(普通の)エクスプローラ」の場合を比較してみてください。  なお、後ろの方で使うのかも知れませんが、お示しのコードの範囲では Set objRE = CreateObject("VBScript.RegExp") は不要です。

ngiajeqgi4
質問者

お礼

Set objRE = CreateObject("VBScript.RegExp")は不要でしたね。 間違えて入れてしまいました。 CreateObject("Shell.Application").Windows がIEとフォルダを扱うオブジェクトだからなのですか。 ウォッチウインドウで確認したらnameが違っていました。 だからnameで条件分岐するのですね。 しかし、今outlook2010を立ち上げている状態なのですが outlookの順番になった時に (実行時エラー 438)オブジェクトは、このプロパティまたはメソッドをサポートしていません。 になります。 ウォッチウインドウを見るとoutlookの時はnameがないようなのですが こういう場合どうやって回避すればいいのでしょうか? Nameではなく LocationName に 「LocationName = "outlook:%26」 のような値が入っています。(個人情報?)

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 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を表示する方法があれば教えてください。 ご教授よろしくお願いします。

  • 現在開いてる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に変えたらエラーになりました。 ご教授よろしくお願いします。

  • 「ページが表示されました」まで取得したい

    IEを立ち上げてステータスバーのテキストを取得して、 「ページが表示されました」を取得出来たら、次のコードへ進みたいのですが、 下のコードでStatusTexttを書き出しても「ページが表示されました」まで取得できません。 Sub test() Dim objIE As InternetExplorer Dim i As Long Set objIE = CreateObject("InternetExplorer.Application") objIE.Navigate "http://www.goo.ne.jp/" objIE.Visible = True Workbooks.Add Cells(1, 1) = objIE.StatusText i = 2 Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Cells(i, 1) = objIE.StatusText i = i + 1 Loop Cells(i, 1) = objIE.StatusText Set objIE = Nothing End Sub Do While objIE.Busy = True Or objIE.ReadyState <> 4 ここら辺のコードを弄ればいいような気がしますが、うまくいきません。 ご回答よろしくお願いします。

  • 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を取得したいのですが

    Sub test1() Dim objIE As InternetExplorer Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "http://www.goo.ne.jp/" Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Loop Debug.Print objIE.Navigate Set objIE = Nothing End Sub //////////////////////////////////////////////// をやろうとすると、 Debug.Print objIE.Navigate の部分で、「引数は省略できません。」とエラーになります。 どう修正すればいいか教えてください。 ("http://www.goo.ne.jp/"はダミーです)

  • IEを探すプログラムがうまくいきません。

    VBScriptで指定するサイトが開いていなかった場合とある処理を行い、とあるサイトが開いていれば別の処理をし終了させることをやっていますがうまくいきません。 自分の考えとしては 1・開いているIEをくるくるループ回して探す 2・その中にヤフーがあればフラグをTrue処理   それ以外はFalse処理 これだけで終わりにしたいのですが・・・ Dim objIE Dim objShell Dim objWindow Dim WinExist Dim strURL Dim Flug Dim strURL2 strURL = "http://www.yahoo.co.jp/" strURL2 = "http://www.google.co.jp/" 'IEが起動して無い場合プログラムが起動しないのでダミー立ち上げ Set objIE = WScript.CreateObject("InternetExplorer.Application") objIE.Navigate "about:blank" objIE.Visible = True Set objIE = Nothing 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 If objIE.LocationURL = strURL Then Flug = True Else If objIE.LocationURL <> strURL Then Flug = False Else WScript.sleep(1) End If If Flug = False Then Set objIE = WScript.CreateObject("InternetExplorer.Application") objIE.Navigate strURL2 objIE.Visible = True Set objIE = Nothing End If ' 'いろいろな処理があるが省く ' If Flug = True Then msgbox "ヤフー存在" End If End If 絶対にフラグがTrueになることがありません。 Excelでデバッグしてみましたがなぜうまくいかないのかが理解できておりません。 自分としては開いているIEをぐるぐるとまず回ってヤフーが開いていればTrue時の処理を行い終了、 なければFalse時の処理を行うという風にしたいです(無限ループではありませんでした) For eachを使っているので途中でIf Flug以降の処理を行ってしまうのも無駄な繰り返しで困ってしまいます。 そこでフラグを立てることを考えたのですがどうも思うようにいきません。 ボキャブラリが足りませんが、いい知恵を貸していただけないでょうか?

  • 数値かどうかを取得したい IsNumberではダメ

    Sub Macro2() Dim mystr As String mystr = "1" If IsDate(mystr) = False Then MsgBox "NO" End If End Sub これなら日付型かどうかを取得できるのに、 Sub Macro1() Dim mystr As String mystr = "1" If IsNumber(mystr) = False Then MsgBox "NO" End If End Sub だと、IsNumberがコンパイルエラーになります。 変数に入っている値が数値として評価できるかを取得する方法を教えてください。

  • VBAでIE操作をするサンプル

    VBAでIE操作をするサンプルをネットでいくつか見ているのですが Sub Sample1() Dim objShell As Object Dim objIE As New InternetExplorer Set objShell = CreateObject("Shell.Application") objIE.Visible = True objIE.Navigate "http://www.yahoo.co.jp/" Set objIE = Nothing Set objShell = Nothing End Sub Sub Sample2() Dim objIE As InternetExplorer Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.Navigate "http://www.yahoo.co.jp/" Set objIE = Nothing End Sub ではどちらを使った方がいいのでしょうか? 圧倒的にSample2の方がネットでは多いのですが Sample1のやり方もあることを知りました。 Sample1の方法でブラウザを開くメリットはあるのでしょうか?

  • サイトタイトルを取得するマクロを最速化

    下記のマクロは、サイトタイトルを取得するマクロです。 このマクロで、サイトタイトルを取得していましたが、 5秒に1つくらいのペースなので、もっとスピードを上げたいと思っています。 最速化するには、どこか修正した方が良い箇所はあるでしょうか? また、変更するべき設定などもあったりするでしょうか? よろしくお願いいたします Sub sample() Dim Carea As Range Set Carea = Selection If Carea(1).Value = "" Then Exit Sub Dim Tcel As Range Dim ObjIE As Object Set ObjIE = CreateObject("InternetExplorer.Application") For Each Tcel In Carea ObjIE.Navigate Tcel.Value Do While ObjIE.Busy = True Or ObjIE.readyState <> 4 DoEvents Loop Tcel.Offset(, 1) = ObjIE.document.Title Next ObjIE.Quit Set ObjIE = Nothing End Sub

  • VBでのContinueが間違っているとき

    http://oshiete1.goo.ne.jp/qa4564345.htmlではありがとうございました。 教わったことを参考にやってみたのですがうまくいきません。 Continueの部分がうまくいくPCといかないPCがあるのでどうしたらいいか分からなくなってしまいました・・・ Option Explicit Dim objIE Dim objShell Dim objWindow Dim WinExist Dim strURL Dim strURL2 Dim Flug strURL = "http://www.yahoo.co.jp/" strURL2 = "http://www.google.co.jp/" WinExist = False Set objShell = CreateObject("Shell.Application") For Each objWindow In objShell.Windows If TypeName(objWindow.Document) <> "HTMLDocument" Then Continue End If WinExist = True Set objIE = objWindow If objIE.LocationURL = strURL Then Flug = True Exit For End If Next If Flug = True Then msgbox "ヤフー存在" Else msgbox "別の処理を行なう" If WinExist = False Then 'IEが無い場合 起動する Set objIE = WScript.CreateObject("InternetExplorer.Application") objIE.Navigate strURL2 objIE.Visible = True Set objIE = Nothing End If End If

このQ&Aのポイント
  • B’s 動画レコーダー 2〜7 to 8 プロ バージョンアップサービス(バリュープラン)の解約について規約を確認したところ、1年間は解約できない場合があることがわかりました。
  • 質問者は、B’s 動画レコーダー 2〜7 to 8 プロ バージョンアップサービス(バリュープラン)の解約が1年間不可かどうか知りたいとしています。
  • ソースネクスト株式会社の製品・サービスについての質問です。
回答を見る

専門家に質問してみよう