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

このQ&Aのポイント
  • フレーム操作について調べている中で、フレームのオブジェクトを変数に格納し、その格納したオブジェクトのURLを表示したいと思っていますが、実行時エラー438が発生してしまいます。
  • メッセージボックスにフレームのURLを表示するために、objFr.document.frames.LocationURLを使用してみましたが、うまくいきませんでした。
  • 格納したフレームのURLを表示する方法について、教えていただけると幸いです。
回答を見る
  • ベストアンサー

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

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

  • ベストアンサー
  • jcctaira
  • ベストアンサー率58% (119/204)
回答No.1

bcrtcjxagatさん こんにちは Stop以下、次のように変更すればできるかと思います。 -------------------------------------- Set objFr = objIE.document.frames MsgBox objFr(1).document.URL -------------------------------------- ※LocationURLではエラーになるのでURLを使用しました。 お試し下さい。

bcrtcjxagat
質問者

お礼

Set objFr = objIE.document.frames MsgBox objFr(1).document.URL これでいけいました。 ありがとうございました。大変参考になりました。

関連するQ&A

  • 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の方法でブラウザを開くメリットはあるのでしょうか?

  • VBA IE操作 ログイン後URLを取得したい

    yahooにログインするVBAコードはわかるのですが、 ログインが失敗なのか正常にログインできたのかをVBAで知りたいです。 結果を知るには、ログインボタン押下後のURLを取得できればいいと思うのですが その方法がわかりません。 ログイン自体は、 --------------------------------------------------------- Sub ie_test() Dim objIE As Object 'IEオブジェクト参照用 'インターネットエクスプローラーのオブジェクトを作る Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True '見えるようにする(お約束) '文字列で指定したURLに飛ぶ objIE.Navigate "https://login.yahoo.co.jp/config/login?.src=www&.done=http://www.yahoo.co.jp" '表示終了まで待つ Do While objIE.Busy = True '何もしないループ(笑) DoEvents Loop '項目名を指定して、データをセットする objIE.document.all.UserName.Value = "UserName" objIE.document.all.passwd.Value = "****" objIE.document.Forms(0).submit End Sub --------------------------------------------------------- で、できました。 objIE.document.Forms(0).submitの後には、 ログインが出来ていたら http://www.yahoo.co.jp/ のページへ行き、 ログイン失敗なら https://login.yahoo.co.jp/config/login? のURLが表示され、図のように 「Yahoo! JAPAN IDまたはパスワードが正しくありません。」 と表示されます。 objIE.document.Forms(0).submitの後に MsgBox objIE.URL を入れると 「オブジェクトは、このプロパティまたはメソッドをサポートしていません。(Error 438)」 になり、 MsgBox objIE.Navigate を入れると 「引数の数が一致していません。または不正なプロパティを指定しています。(Error 450)」 になります。 ログイン後のソースをエクセルに書き出す方法も考えましたが、書き出しに時間がかかるのでやめました。 ご教授よろしくお願いします。

  • IEの操作(Busy)でエラーになる

    下記コードを実行するとBusyの所でエラーになってしまいます。 何が悪いのでしょうか?教えて下さい。 Excel2000で起動しました。 Sub tst031() Dim fff As String 'ファイルパス Dim objIE As Object 'オブジェクト Dim Myhtml As Variant 'HTMLタグデータ Dim objTAG As Object '制御htmlファイル fff = "http://oshiete.goo.ne.jp/" 'Webページ表示 Set objIE = CreateObject("InternetExplorer.Application") objIE.Navigate fff '画面表示待ち Do While objIE.Busy = True DoEvents Loop For Each objTAG In objIE.document.body.all Debug.Print objTAG.tagName Next objIE.Quit 'MsgBox Myhtml End Sub

  • MSXML2で、サイトのタイトルを取得したい

    アクセスvbaです。 InternetExplorerの方法だと、 **************************************************** Sub Sample1() Dim ObjIE As InternetExplorer Set ObjIE = CreateObject("InternetExplorer.Application") ObjIE.Navigate "http://www.yahoo.co.jp/" ObjIE.Visible = True Do While ObjIE.Busy = True DoEvents Loop Do While ObjIE.Document.ReadyState <> "complete" DoEvents Loop Debug.Print ObjIE.Document.Title Debug.Print ObjIE.LocationName ' 同じ ObjIE.Quit Set ObjIE = Nothing End Sub **************************************************** で、該当のサイトのタイトルを取得できるのですが、 これではなく、 **************************************************** Sub Sample2() Dim objMSXML2 As Object Dim myObj As Object Dim myAll As Variant Set objMSXML2 = CreateObject("MSXML2.XMLHTTP") objMSXML2.Open "GET", "http://www.yahoo.co.jp/", False objMSXML2.Send myAll = objMSXML2.responseText 'ソースを抜き出す ’タイトル取得 Set objMSXML2 = Nothing End Sub **************************************************** の方法で、サイトのタイトルを取得したいのですが、 可能でしょうか? コードをご教授ください。よろしくお願いします。

  • VBAで文字の位置が正確に取得できない

    Excel2003のマクロで、URLを抜き出すマクロを作っているのですが、なぜかurl_endの値が正確に取得できません。何がいけないのでしょうか? 事象 url_endに格納される値がなぜか1376(くらいだったような・・)になってしまう。 url_startには1260が格納されており、<a href=の部分をきちんと取得している。 ソース Sub test() Dim objIE As Object Dim objTAG As Object Dim souce As String Dim url As String Dim url_start As String Dim url_end As String url_end = 1 Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = False objIE.Navigate "http://dir.yahoo.co.jp/" Do While objIE.Busy = True DoEvents Loop Application.Wait Time:=Now + TimeValue("00:00:02") url_start = InStr(url_end, objIE.Document.All(1).Innerhtml,"<a href=", vbTextCompare) url_end = InStr(url_start,objIE.Document.All(1).Innerhtml, ">", vbTextCompare) url = Mid(objIE.Document.All(1).Innerhtml, url_start, url_end) Cells(1, 1).Value = url End Sub

  • vbaie操作 新しく開いたウインドウを操作したい

    こんばんは。いつもお世話になっております。 新たに開いたウインドウをVBAでキャッチ(?)して、 オブジェクトの中に入れたいのですがやり方が分かりません。 OS:XP、オフィス2003です。 http://okwave.jp/qa/q7643293.html を参考に、 --------------------------------------------------------- Option Explicit Sub test1() Dim objIE As InternetExplorer Set objIE = CreateObject("InternetExplorer.Application") objIE.Navigate "http://www.goo.ne.jp/" objIE.Visible = True Do While objIE.Busy = True DoEvents Loop Do While objIE.Document.ReadyState <> "complete" DoEvents Loop ’安否情報確認サイト 【J-anpi】をクリックする For i = 0 To objIE.Document.Links.Length - 1 If objIE.Document.Links(i).href = "http://anpi.jp/" Then objIE.Document.Links(i).Target = "_blank" objIE.Document.Links(i).Click Exit For End If Next i objIE.Document.all("name").Value = "test" 'エラーになる Set objIE = Nothing End Sub --------------------------------------------------------- を実行した時に、 http://anpi.jp/top のページの“名前“をVBAで入れたいのですが、実行時エラー91になります。 理由は、 objIEには、http://www.goo.ne.jp/が入ってるから、 http://anpi.jp/topのページは操作できないのが原因だと思うのですが Dim objIE2 As InternetExplorer のように新たなオブジェクトを作って、 objIE2にhttp://anpi.jp/topを入れて操作するにはどうすればいいでしょうか? 最初から、 objIE.Navigate http://anpi.jp/top を開いたり、 objIE.Navigate2 http://anpi.jp/top , 2048 で新たなタブを開く方法以外でお願いします。 Debug.Print objIE.LocationURL を見ると、 http://www.goo.ne.jp/ が返ってきます。(そりゃそうか) 本当はこのサイトはサンプルで実際は、 vbaで objIE.Document.Links(i).Target = "_blank" objIE.Document.Links(i).Click をクリックした場合、 新たに開いたウインドウをVBAでテキストに文字を入れたり、ボタンを押したりの操作する方法を知りたいのです。 objIE.document.Links(i).Click このタイミングで、 objIEにhttp://anpi.jp/topがはいればいいなーって思ってます。 --------------------------------------------------------- Sub test2() Dim objIE As InternetExplorer Dim objIE2 As InternetExplorer Set objIE = CreateObject("InternetExplorer.Application") Set objIE2 = CreateObject("InternetExplorer.Application") objIE.Navigate "http://www.goo.ne.jp/" objIE.Visible = True Do While objIE.Busy = True DoEvents Loop Do While objIE.Document.ReadyState <> "complete" DoEvents Loop ’安否情報確認サイト 【J-anpi】をクリックする objIE2.Navigate "http://anpi.jp/top" objIE2.Visible = True objIE2.Document.all("name").Value = "test" 'エラーになる Set objIE = Nothing Set objIE2 = Nothing End Sub --------------------------------------------------------- これにするしかないのでしょうか? ご回答よろしくお願いします。

  • IE制御でコピーをしたいのだけれど

    うまくいきません ログイン後の最初のページはコピーすることができるのですが フレームを指定して objDOC.Links(18).Click としてページを進めた先がコピーできません いかに全文を載せます。自分でいろいろやってみたのですが ちょっとわかりません。教えてください! Sub 確認()   Dim objIE As InternetExplorer Dim strUserName, strPassword As String Dim Code, Suryo, Kakaku As Long strUserName = Range("AA1").Value strPassword = Range("AA2").Value Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True   'ログイン画面---------------- objIE.Navigate "https://www2…………   IE_Complete objIE objIE.Document.all.req_userId.Value = strUserName         objIE.Document.all.req_password.Value = strPassword   objIE.Document.all.LoginSubmit.Click IE_Complete objIE 'ログイン画面ここまで Dim objFRAME As FramesCollection    Set objFRAME = objIE.Document.frames    Debug.Print "フレームの数は" & objFRAME.Length    Dim objDOC As HTMLDocument    Set objDOC = objFRAME(0).Document    Set objDOC = objFRAME(0).Document        objDOC.Links(18).Click objIE.ExecWB 17, 0 objIE.ExecWB 12, 0 Sheets("コピー").Select    Cells.Select Selection.Delete Shift:=xlUp  Range("A1").Select  ActiveSheet.PasteSpecial Format:="HTML" objIE.Quit End Sub

  • NavigateとNavigate2の違いは?

    Sub Sample_Navigate() Dim objIE As Object Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.Navigate "http://www.yahoo.co.jp/" Set objIE = Nothing End Sub Sub Sample_Navigate2() Dim objIE As Object Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.Navigate2 "http://www.yahoo.co.jp/" Set objIE = Nothing End Sub 上記二つのサンプルをテストしてみましたが違いが判りません。 Navigate2のヘルプを見ようとしても キーワードが見つかりません。が見つかりませんになってしまいます。 この二つのメソッドの違いを教えていただけますか? オブジェクトブラウザの情報だと Navigateは Sub Navigate(URL As String, [Flags], [TargetFrameName], [PostData], [Headers]) SHDocVw.InternetExplorer のメンバー Navigates to a URL or file. Navigate2は Sub Navigate2(URL, [Flags], [TargetFrameName], [PostData], [Headers]) SHDocVw.InternetExplorer のメンバー Navigates to a URL or file or pidl. と書いてありました。 引数の数は一緒でした。

  • VBAからIEの操作

    グーグルをIEで開いてVBA(語句)を検索して見終わったら IEを閉じる作業をしたいのですが、検索窓にVBA(語句)を 入力するところでエラーとなります。初心者ですが、なんとか 勉強したいのでよろしくお願いいたします。 Sub ie_test_Navigate() Dim objIE As Object Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.Navigate "http://www.google.co.jp/" IE.document.all.q.Value = "VBA" IE.document.all.btnG.Click If MsgBox("IEを閉じますか?", vbYesNo, "終了確認") = vbYes Then objIE.Quit End If Set objIE = Nothing End Sub

  • myObjにタグを格納してループはできない?

    MSXML2.XMLHTTPの時は、 myObjにタグを格納してループはできないのでしょうか? Sub test() Dim objIE As Object Dim myObj As Object Set objIE = CreateObject("MSXML2.XMLHTTP") objIE.Open "GET", "http://○○.html", False objIE.send For Each myObj In objIE.Document.all.tags("p") Next Set objIE = Nothing End Sub 上記だと実行時エラー438になります。 Set objIE =CreateObject("InternetExplorer.Application") でループしないとダメでしょうか? Set objIE =CreateObject("InternetExplorer.Application") は時間がかかるので、できれば Set objIE =CreateObject("MSXML2.XMLHTTP") でやりたかったのですが、タグを格納できないのでしょうか?

専門家に質問してみよう