• ベストアンサー

vbaでIEの操作

こんばんは。やりたいことができないので教えてください。 vbaで指定のurlを開きたいです。 エクセル2003とIE8です。 Sub test001() Dim ObjIE As Object Set ObjIE = CreateObject("InternetExplorer.application") ObjIE.Visible = True ObjIE.navigate "http://jp.msn.com/" Do While ObjIE.Busy = True '表示させるまで待つ DoEvents Loop End Sub これでIEを立ち上げてURLを開けるのですが これでは新しいウインドウで開いてしまいます。 現在IEを立ち上げていて、上記のコードを実行すると 新たなタブで開きたいですが解決策はありますか? ObjIE.Visible = True が原因かと思い、これを抜かしてみましたが そうすると何も起こりません。 VBAで既に開いているIEの新しいタブでURLを開く方法をご教授ください!よろしくお願いします。

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

  • ベストアンサー
  • marbin
  • ベストアンサー率27% (636/2290)
回答No.1

navOpenInNewTab でネット検索するといいことあるかも。

nifufu2
質問者

お礼

早速調べてみます。ありがとうございます。

その他の回答 (6)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.7

こんにちは。 #2,#3の回答者です。 >そうなんですか。 >もっと勉強します。 「そうなんですか」といわれる意味がさっぱり理解できません。私の言っているのは、間違っているという意味なんでしょうけれども、率直に、「分からない」と言っていただいたほうがよいと思います。回答者は、質問に対して、解決に結びつけると思って書いているのですから、解決の手立てとして書いていることに対して、そういう返事の仕方は、良くないと思います。 即効するコードを得られるとは限りませんから、違うならきちんと説明してください。それは他の方のためでもあります。ある程度、VBAの力があれば、#1さんの回答で、すべて解決していたはずでした。 ただ、一応、どういうつもりなのか、こちらは分かりませんが、ひとつプロシージャでタブにURLを入れるコードを出しておきます。あくまで、私のオリジナルです。 '------------------------------------------- Sub TestMacro1()   Dim objIE As Object   Dim objShellWindows As Object   Dim w As Variant   Const navOpenInNewTab As Long = &H800   Set objIE = CreateObject("InternetExplorer.application")   objIE.Visible = True   objIE.Navigate "http://www.google.co.jp/"   Do While objIE.Busy = True     DoEvents   Loop '------------------------------------------- '私の書いたコードのつけたし   Application.Wait Now() + TimeSerial(0, 0, 2) ''2秒   Set objShellWindows = CreateObject("Shell.Application").Windows()   For Each w In objShellWindows    If TypeName(w) = "IWebBrowser2" Then       Set objIE = w       Exit For    End If   Next   If Not objIE Is Nothing Then   objIE.Navigate2 "http://jp.msn.com/", navOpenInNewTab  End If  Set objShellWindows = Nothing End Sub p.s.GoogleやMSNなどの有名どころのURLは、直接、コードに書いてもペンディング状態にならないと思います。

nifufu2
質問者

お礼

気に障ったようでしたら、謹んでお詫びしておきます。申し訳ありません。 知識が乏しく理解できなかったためあのような回答をしてしまいました。以後気をつけます。 再度ありがとうございます。 じっくり試してみます。

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

[回答番号:No.5] の DOUGLAS_ です。 #前回答も今回の回答も「http」の最初の「h」は半角に書き換えてお試しください。 >vbaで指定のurlを開きたいです。 でしたね。  ただ「指定のurlを開きたい」だけでしたら、[タブ ブラウズ の設定] ダイアログ での設定が普通にできていれば、 Sub Macro()  ActiveWorkbook.FollowHyperlink "http://jp.msn.com/" End Sub だけで十分かと存じます。  ただし、「指定のurlを開」いたあとに、VBA で何某かの処理をなさりたい、というようなことでしたら、 Sub Macro()  Dim objShell As Object  Dim objIE As Object  Dim SWC 'As Long  Set objShell = CreateObject("Shell.Application")  SWC = objShell.Windows.Count  ActiveWorkbook.FollowHyperlink "http://jp.msn.com/"  Set objIE = objShell.Windows(SWC)  '何某かの処理 End Sub のようにして、「objIE.Document.Title」というように プロパティ を指定してください。 #ちなみに、[回答番号:No.5] は、エクスプローラ も IE も開いていない場合の エラー処理 は施しておりません。

nifufu2
質問者

お礼

ActiveWorkbook.FollowHyperlink "http://jp.msn.com/" これでもできることを忘れてました! ありがとうございます。

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

●特定の Web サイトに対して開く Internet Explorer ウィンドウがあるかどうかを確認する方法はありますか http://www.microsoft.com/japan/technet/scriptcenter/resources/qanda/sept06/hey0915.mspx によりますと、[CreateObject 関数] によって作成された「shell.application」 の「windows コレクション」には「Windows エクスプローラ」または「Internet Explorer」の 実行インスタンス が表示されます。  ということで、上記 URLや、よく参照される VBA 関連の WEBページでは、もっぱら「windows コレクション」を「For ~ Next」で回したり、「Windows.Count」で ターゲット を絞り込んでいらっしゃいます。  それはさておき、Internet Explorer さんは、「Windows 95+Internet Explorer 4.0」以降、Windows Explorer さんと『統合』されましたよね。 参考URL)Windows Explorer http://ja.wikipedia.org/wiki/Windows_Explorer  IE の アドレスバー ではなくて、マイコンピュータ などの エクスプローラ の アドレスバー からでも WEBページ を開くということは、普通に手作業で行えることですので、VBA でもできて当たり前かなぁと考えたのですが、案の定、できました。 ・IE が開いていないときは、新しい IE の ウィンドウ を開いて「msn」の ページ を開きます。 ・既存の IE の ウィンドウ があるときには、新しい タブ で「msn」の ページ を開きます。 Sub Macro()  Dim objIE As Object  Set objIE = CreateObject("Shell.Application")  With objIE.Windows(0)   .Navigate2 "http://jp.msn.com/", &H800   While .Busy Or .ReadyState <> 4: DoEvents: Wend  End With End Sub  以上です。  なお、IE8 で [ツール(T)] - [インターネット オプション(O)] - [全般] タブ の [タブ] - [設定(T)] - [タブ ブラウズ の設定] ダイアログ に挙げられた設定項目が、ひょっとしたら微妙に関係あるかもしれませんので...。

nifufu2
質問者

お礼

ちょっと難しいのでもっと勉強してみます。ありがとうございます。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.4

http://www.happy2-island.com/vbs/cafe02/capter00711.shtml を参考にすると出来ませんか。 本件詳しくなくて、IE7ですが。 エクセルVBAの標準モジュールに 上記サイトの例をほとんどコピーですが、一部弄くって Option Explicit Sub test01() Const navOpenInNewTab = &H800 Const navOpenInBackgroundTab = &H1000 Dim objIE Dim objShell Dim objWindow Dim lngCount 'Shell.Applicationオブジェクトの作成 Set objShell = CreateObject("Shell.Application") 'IEウィンドウの個数をカウント lngCount = 0 For Each objWindow In objShell.Windows lngCount = lngCount + 1 Next With objShell.Windows 'IEオブジェクトがないときは、新しく作成する If lngCount = 0 Then .Item.Navigate2 "http://www.google.co.jp/" lngCount = lngCount + 1 'IEオブジェクトがあるときは、タブを操作する(新しいタブを作成) Else .Item(lngCount - 1).Navigate2 "http://www.google.co.jp/", navOpenInNewTab '第2引数を省略したときは、lngCountを減算してください 'lngCount = lngCount - 1 .Item(lngCount - 1).Navigate2 "http://okwave.jp:80/qa5485631.html", navOpenInNewTab End If 'オブジェクトが確定するまでの空ループ Do Until Not .Item(lngCount) Is Nothing 'WScript.Sleep 100 Loop 'IEオブジェクトを取得 Set objIE = .Item(lngCount) End With MsgBox "ダイアログを閉じた後、5秒後にIE(タブ)を閉じます。" 'WScript.Sleep Sleep 5000 '表示しているページの情報を表示 MsgBox objIE.LocationURL MsgBox objIE.LocationName 'objIE.Quit 'Set objIE = Nothing 'Set objShell = Nothing End Sub 何かIEで開いておいて、実行すると、 開いていたもの Google 本質問 の3つがタブを別にして開くようです。

nifufu2
質問者

お礼

できました!! 助かりました! ありがとうございます。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんばんは。 >しかしエラーにもなりませんが何も起こりませんでした。 当然、#2のマクロだけでは、何も起こりません。すでに開いているIEという条件ですから。ただし、タブ自体は、IEのオブションだったような気がします。それで違うようなら、wが、Object を取得しているか調べてみてみださい。ただし、IE8 は良く知りません。

nifufu2
質問者

お礼

そうなんですか。 もっと勉強します。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 こんな風にすれば、取れます。 なお、それぞれのオブジェクトは、事前Binding しておいても良いかと思います。 なお、なぜというのはなしにしてくださいね。 '------------------------------------------- Sub Test1() Dim objShellWindows As Object Dim w As Variant Dim objIE As Object   Set objShellWindows = CreateObject("Shell.Application").Windows()   For Each w In objShellWindows    If TypeName(w) = "IWebBrowser2" Then       Set objIE = w       Exit For    End If   Next   If Not objIE Is Nothing Then   objIE.Navigate " http://jp.msn.com/"   '操作  End If End Sub

nifufu2
質問者

お礼

ご回答ありがとうございます。 しかしエラーにもなりませんが何も起こりませんでした。

関連するQ&A

  • vbaでIEを閉じるだけの処理

    オフィス2003を使用しています。 「IEを開いて閉じる」は Sub TEST() Set ObjIE = CreateObject("InternetExplorer.application") ObjIE.Visible = True '見えるようにする '文字列で指定したURLに飛ぶ ObjIE.navigate "http://www.yahoo.co.jp/index.html" '表示終了まで待つ Do While ObjIE.Busy = True DoEvents Loop ObjIE.Quit End Sub と言うことがわかったのですが 開くのは他の作業をしたときに行うので 「閉じる」だけをvbaで行いたいのですがどうすればいいのかわかりません。 Sub TEST2() Set ObjIE = CreateObject("InternetExplorer.application") ObjIE.Visible = True '見えるようにする ObjIE.Quit End Sub だと また新たなIEが起動してしまい「現在起動しているIEを閉じる」と言うことができません。 アドバイスをお願い致します。

  • ie操作 ローカルパスだとエラーになる

    ヤフーなら問題なくコードが動くのに、URLがローカルのパスだと、エラーになってしまいます。 具体的には、 *********************************************************** Sub Sample1() Set objIE = CreateObject("InternetExplorer.Application") objIE.Navigate "http://www.yahoo.co.jp/" objIE.Visible = True Do Until objIE.ReadyState = 4 Loop Do While objIE.Busy = True DoEvents Loop End Sub *********************************************************** だと、問題なく実行されるのに、 *********************************************************** Sub Sample2() strFName = MyDesktop & "\index.html" Set objIE = CreateObject("InternetExplorer.Application") objIE.Navigate strFName objIE.Visible = True Do Until objIE.ReadyState = 4 Loop Do While objIE.Busy = True DoEvents Loop End Sub ------------------------- Function MyDesktop() Dim WSH As Variant Set WSH = CreateObject("Wscript.Shell") MyDesktop = WSH.SpecialFolders("Desktop") Set WSH = Nothing End Function *********************************************************** だと、 Do Until objIE.ReadyState = 4 で オートメーションエラー 起動されたオブジェクトはクライアントから切断されました。 となります。 なぜローカルだと、エラーになるのでしょうか? 何が違うのでしょうか?

  • エクセル VBA で IE操作 

    エクセルVBAにて IEを操作し リンクをクリックするには どのような記述になりますでしょうか? たとえば http://okwave.jp/mypage へアクセスし画面右上 カテゴリ をクリック 次に Excel(エクセル) をクリック という具合に 画面に表示されている文字を順番にクリックしたいです。 マクロを見つけてきましたが クリックというのはどう記述していいやらさっぱりです。 Sub testIE() Dim objIE As InternetExplorer 'IEオブジェクトを準備 Set objIE = CreateObject("Internetexplorer.Application") '新しいIEオブジェクトを作成してセット objIE.Visible = True 'IEを表示 objIE.navigate "http://okwave.jp/mypage" 'IEでURLを開く Do While objIE.Busy = True Or objIE.readyState < READYSTATE_COMPLETE '読み込み待ち DoEvents Loop

  • 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();" でうまくいってたのですが、 なぜか出来なくなってしまいました。 そんな事ありますか? コードが間違ってるのでしょうか? ご教授よろしくお願いします。

  • 【VBA】IEのリンクを新しいタブで開く

    VBAでIEを制御しリンク(アンカー)<a href="***">を新しいタブで開くようにしたいのですが可能でしょうか? 仮にグーグルのトップページ(http://www.google.co.jp/)の『検索オプション』(http://www.google.co.jp/advanced_search?hl=ja)を新しいタブで開くとします 実際に開きたいリンクのURLは固定ではないためURLの指定では開けませんが、飛びたいリンクの文言(『検索オプション』)は固定です リンクに飛ぶ前に飛ぶ先のURLを取得する仕方か、Shift+Ctrl+クリックのようにリンクを新しいタブで開く方法を教えてください 一度普通にリンクに飛んでからURLを取得し、戻ってから新しいタブで開くぐらいしかできないのでしょうか? Sub 新しいタブで開く() Dim objIE As Object Dim objShell Dim URL As String Set objShell = CreateObject("Shell.Application") For n = objShell.Windows.Count To 1 Step -1 Set objIE = objShell.Windows(n - 1) If Right(UCase(objIE.FullName), 12) = "IEXPLORE.EXE" Then objIE.Navigate "http://www.google.co.jp/" Exit For End If Next Set objShell = Nothing objIE.Visible = True Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Loop For Each Obj In objIE.Document.getElementsByTagName("a") If Obj.innerText = "検索オプション" Then Obj.Click Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Loop URL = objIE.Document.URL objIE.GoBack Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Loop objIE.Navigate URL, CLng(&H800) Exit For End If Next End Sub よろしくお願いいたします

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

  • IE 「拡大レベルの変更」を調整したい

    IE8+offce2003です。 ブラウザの右下に「拡大レベルの変更」というのがあり 手動で100%や75%に変更できますが vbaで変更する方法はありますか? とあるページを開く時は100%、違うページを開く時は75%、 としていので、手動ではなくvbaで行ないたいです。 Sub test() Set ObjIE = CreateObject("InternetExplorer.application") ObjIE.Visible = True ObjIE.Navigate "http://www.yahoo.co.jp/" Do While ObjIE.Busy = True '表示させるまで待つ DoEvents Loop 'サイズの調整をする処理 End Sub コードを聞くのはご法度かもしれませんが ご教授よろしくお願い致します。

  • 複数のタブを開きたい IE

    IE9を使っています。 画像のようにタブを二つ開くにはどうすればいいでしょうか? Sub test() Dim objIE As InternetExplorer Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.Navigate "http://www.yahoo.co.jp/" Set objIE = Nothing End Sub だと一つのタブしか開けません。 Sub test() Dim objIE As InternetExplorer Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.Navigate "http://www.yahoo.co.jp/" objIE.Navigate "http://www.yahoo.co.jp/" Set objIE = Nothing End Sub にしても Sub test() Dim objIE As InternetExplorer Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.Navigate "http://www.yahoo.co.jp/" objIE.Navigate2 "http://www.yahoo.co.jp/" Set objIE = Nothing End Sub にしても1つのタブしか開けないです。 ご回答よろしくお願いします。

  • 無限ループ objIE.Navigate

    win8.1でvbaでブラウザを操作しています。 XPからWIN7までは、 Sub Sample() Dim objIE As InternetExplorer Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.Navigate "http://www.yahoo.co.jp/" Do While objIE.Busy = True DoEvents Loop objIE.Navigate "http://shopping.yahoo.co.jp/" ・・・ このように、 objIE.Navigate に、URLを入れ替えても、問題なく表示できたのですが win8からは objIE.Navigateで、1つ目のURLを表示させ、2つ目のURLを表示させると、 見た目は、 二つ目の"http://shopping.yahoo.co.jp/"が表示されるのですが、 objIEの中身は、1つ目の "http://www.yahoo.co.jp/"のままです。 なので、 objIE.Navigate "http://shopping.yahoo.co.jp/" のあとに、 Do While objIE.Busy = True DoEvents Loop をしても、 objIEに格納されている値は、 "http://www.yahoo.co.jp/"だから 無限ループしてしまいます。 この現象を回避するにはどうすればいいでしょうか? エクセル2010です。 よろしくお願いします。

  • 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

専門家に質問してみよう