VBAでIEのアドレスを取得する方法

このQ&Aのポイント
  • VBAでIEのアドレスを取得する方法について教えてください。
  • ログイン状態によってパスワード入力画面が必要な場合、現在開かれているページのアドレスを取得して処理を分岐させたいです。
  • お手数ですが、どのようにすれば現在開かれているアドレスを取得できるでしょうか?
回答を見る
  • ベストアンサー

現在開かれているIEのアドレスを取得したい

お世話になります。 VBAで作成しております。 objIE.Navigate "http:A" でAのページを開こうとしています。 しかしながら、Aに行くにはパスワードが必要で途中でBのパスワードを入力する画面が必要になることがあります。 既にログインしている場合は objIE.Navigate "http:A" IEのフォームに対して入力するコマンド でうまくいくのですが、 ログインしていないときは objIE.Navigate "http:A"をすると、パスワード入力画面が 出てきますので、 IEのフォームに対して入力するコマンド でエラーが出ます。 そこで、現在開かれているページのアドレスを取得して、 "http:A" ならIEのフォームに対して入力するコマンド を実行と したいのですが、 現在IEで開かれているアドレスはどのようにすれば取得できるでしょうか? お手数ですがよろしくお願いします。

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

  • ベストアンサー
  • watabe007
  • ベストアンサー率62% (476/760)
回答No.1

>現在開かれているIEのアドレスを取得したい Sub Test()   Dim objIE As Object   Dim objShell As Object   Dim objWin As Object   Set objShell = CreateObject("Shell.Application")     For Each objWin In objShell.Windows     If TypeName(objWin.document) = "HTMLDocument" Then       MsgBox objWin.LocationURL     End If   Next End Sub

関連するQ&A

  • IEの制御のマクロをつくっていますが

    ログインと作業実行を別々のマクロにしたいのですが マクロでログインを省略して次の画面にもっていきたいので objIE.navigate "https://........... とやると、セキュリティの関係だと思いますが画面がはじかれてしまいます。 ですのでいまはひとつの作業をするのにその都度ログインのマクロからになってしまいます。 何かいい方法がございましたらご教授ください。 Sub ログイン() Dim objIE As InternetExplorer Dim strUserName, strPassword As String strUserName = Range("AA1").Value strPassword = Range("AA2").Value Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.navigate "https://mobile.e..............’ログイン画面 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 ここまでログイン 上記を省略して以下からはじめたい Sub 作業実行() objIE.navigate "https://...........

  • IE操作 StatusTextの文字を取得したい

    現在IE9を使っています。 IE8なら、添付画像の赤で囲った部分に "ページが表示されました"と表示されますが、IE9では表示されません。 ここに文字を表示し、文字を取得するにはどうすればいいでしょうか? ************************************* Sub Sample() Dim objIE As InternetExplorer Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "http://www.goo.ne.jp/" objIE.StatusText = True '意味ないっぽい Debug.Print objIE.StatusText objIE.Quit Set objIE = Nothing End Sub ************************************* これでは取得されませんでした。 Do DoEvents Loop Until objIE.StatusText = "ページが表示されました" のように、ページが表示されたら、次のコードに進む・・・とやりたいです。

  • 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)」 になります。 ログイン後のソースをエクセルに書き出す方法も考えましたが、書き出しに時間がかかるのでやめました。 ご教授よろしくお願いします。

  • VBAにて:開いているIEのアドレスを取得するには?

    セルに入力してあるアドレスを利用して、VBAからIEを開き、そのサイトを開くことが出来ます。 ところが、そのアドレスが現在は使われてなくて、 ”お探しのページが見つかりませんでした” と表示されることがあります。 この時、IEをVBAから閉じたいのですが、その判断方法として、 セルのアドレスとIEに表示されているアドレスが異なる ことを利用しようと考えています。 そのために、IEのアドレスの取得方法を知りたいのです。 ご存知の方お願いします。

  • VBAで既に開いているIEをアクティブにするには

    質問しつれいします。 三流君のサイトをみながら、エクセルのVBAで、IEを開き証券口座にログインするプログラムを作りました。 一つのプログラムでIEを起動して、注文実行まではできるのですが、既に開いている(口座にログインしている)IEをアクティブにしてそこから注文する方法がわからず困っています。 相場が開いている間、シグナルが出た場合、すぐにIEをアクティブにして、注文を入力するプログラムをつくりたいと思っています。 既に開いてるIE(口座にログインしている)を選択し、objIE.navigate "" 'で指定のページに移動できるようにするにはどうしたらいいでしょうか?

  • IE操作で次ページを別タブに表示するには?

    VB.NET(VB 2010 Express)でIE(Ver.9)をWebBrowserコントロールではなく直接操作しています。 下記のコードのように、あるサイトのトップページを表示し、それにユーザID、パスワードを入力し、ログオンボタンをクリックして次のページを表示します。 次のページはトップページと同じタブに表示されますが、これを別タブに表示するにはどうすればよいのでしょうか?ご教示頂きたくよろしくお願い致します。 objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.Navigate("https://xxxxxxx.co.jp")    '表示ページのソース読込み完了を待つ(略) objIE.Document.all("ACCOUNT").Value = "yyyyyy" 'ユーザIDを入力 objIE.Document.all("PASSWD").Value = "zzzzz"   'パスワードを入力 objIE.Document.all("btn").Click()              'ログインボタンをクリック     '以下表示した次ページのソースを処理

  • ie操作 ボタンが押せる時と押せない時がある

    こんばんは。よろしくお願いします。 ie操作でボタンが押せる時と押せない時があるのですが、 違いがわかりません。 --------------------------------------------------------- Sub test1() Dim objIE As Object Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "http://www.mitsui-direct.co.jp/customer/" 'ダイレクトにログインページへはいけない。 Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Loop objIE.Navigate "javascript:gotoMyhp();" Set objIE = Nothing End Sub --------------------------------------------------------- これなのですが、http://www.mitsui-direct.co.jp/customer/のサイトへいって、 右側の「Myホームページログイン」を押したいのですが、 最初は、objIE.Navigate "javascript:gotoMyhp();" でうまくいってたのですが、 なぜか出来なくなってしまいました。 そんな事ありますか? コードが間違ってるのでしょうか? ご教授よろしくお願いします。

  • IEがアプリケーションの後ろで開いてしまう

    フォームにコマンドボタンを設置して、 Sub test() Set ObjIE = CreateObject("InternetExplorer.application") ObjIE.Visible = True ObjIE.Navigate "http://www.yahoo.co.jp/" Set ObjIE = Nothing End Sub で、IEを開いているのですが、accessの裏で開いてしまい、アクティブになりません。 しかし、毎回そういうわけでもなく、アクティブになる時もあります。 上記VBAコードにブレークポイントを設置し、一度開くと、それ以後はアクティブになります。 当方の環境は、 win7、OFFICE2007です。 常にIEを開く時はアクティブで開く方法をご存知の方、ご教授よろしくお願いします。

  • ie操作 2回目のwaitが無視される

    FC2にログインし、アクセス解析のページを開きたいのですが Dim objIE As InternetExplorer Sub test() Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.navigate "http://fc2.com/login.php" Call wait objIE.document.all("email").Value = "test@yahoo.co.jp" objIE.document.all("pass").Value = "test" objIE.document.all.Item("Image").Click Call wait 'ここが無視される!!! objIE.navigate "http://analyzer.fc2.com/" End Sub Sub wait() Const READYSTATE_COMPLETE As Long = 4 Do Until objIE.readyState = READYSTATE_COMPLETE Loop Do While objIE.Busy = True DoEvents Loop End Sub このコードだとうまくいきません。 このコードをF5で実行すると、エラーにはならないのですが、 objIE.navigate "http://analyzer.fc2.com/" ができてません。 objIE.navigate "http://analyzer.fc2.com/"の部分にブレークポイントを設置し、 ログイン後の画面がちゃんと表示されたことを確認して、 objIE.navigate "http://analyzer.fc2.com/"に進むと、 objIE.navigate "http://analyzer.fc2.com/"が無視され、 http://analyzer.fc2.com/のページに移りません。 同じ条件なのに、 objIE.navigate "http://analyzer.fc2.com/"の部分にブレークポイントを設置し、 ログイン後の画面がちゃんと表示されたことを確認して、 objIE.navigate "http://analyzer.fc2.com/"に進むと、 実行時エラー -2147024726のオートメーションエラーになることがあります。 どうやったら、2回目のwaitが無視されずに進みますか? ログインされると http://fc2.com/login.php から http://id.fc2.com/?login=done へURLが変わりますが objIEをウォッチウィンドウで見てると、ずっとhttp://fc2.com/login.phpのままです。 環境:win8.1/エクセル2010

  • 【アクセス】リンク切れかどうかをVBAで取得したい

    テーブル1のフィールド1をハイパーリンク型にし、 アドレスを「http://www.yahoo.co.jp/」と入力し、保存しました。 そのレコードをクリックすると、ヤフーのHPが開きます。 しかし、アドレスを「//www.yahoo.co.jp/」とした場合、 もちろんURLは開けません。 エラーメッセージが出たあとに 『「//www.yahoo.co.jp/」を開くことができません。 指定されたファイルを開くことができません。』 と再度エラーメッセージが表示されます。 このエラーが表示されるかどうかの結果をvbaで取得するのは可能でしょうか? わざとエラーを発生させるために Sub test() Dim ObjIE As Object Dim URL As String Set ObjIE = CreateObject("InternetExplorer.Application") URL = "http://www.co.jp/"’←ここの部分はあとでレコードの情報を読み取るコードを考えます。 ObjIE.Navigate (URL) ObjIE.Visible = True Set ObjIE = Nothing End Sub としてみましたが IEが開き、「Inernet Explorer ではこのページは表示できません」 となりますが、、エラーページかどうかの情報はvbaでは取得できません。 この場合、どうすればいいのでしょうか? ご教授よろしくお願い致します。

専門家に質問してみよう