- ベストアンサー
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を開く方法をご教授ください!よろしくお願いします。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
navOpenInNewTab でネット検索するといいことあるかも。
その他の回答 (6)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 #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は、直接、コードに書いてもペンディング状態にならないと思います。
お礼
気に障ったようでしたら、謹んでお詫びしておきます。申し訳ありません。 知識が乏しく理解できなかったためあのような回答をしてしまいました。以後気をつけます。 再度ありがとうございます。 じっくり試してみます。
- DOUGLAS_
- ベストアンサー率74% (397/534)
[回答番号: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 も開いていない場合の エラー処理 は施しておりません。
お礼
ActiveWorkbook.FollowHyperlink "http://jp.msn.com/" これでもできることを忘れてました! ありがとうございます。
- DOUGLAS_
- ベストアンサー率74% (397/534)
●特定の 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)] - [タブ ブラウズ の設定] ダイアログ に挙げられた設定項目が、ひょっとしたら微妙に関係あるかもしれませんので...。
お礼
ちょっと難しいのでもっと勉強してみます。ありがとうございます。
- imogasi
- ベストアンサー率27% (4737/17069)
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つがタブを別にして開くようです。
お礼
できました!! 助かりました! ありがとうございます。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 >しかしエラーにもなりませんが何も起こりませんでした。 当然、#2のマクロだけでは、何も起こりません。すでに開いているIEという条件ですから。ただし、タブ自体は、IEのオブションだったような気がします。それで違うようなら、wが、Object を取得しているか調べてみてみださい。ただし、IE8 は良く知りません。
お礼
そうなんですか。 もっと勉強します。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 こんな風にすれば、取れます。 なお、それぞれのオブジェクトは、事前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
お礼
ご回答ありがとうございます。 しかしエラーにもなりませんが何も起こりませんでした。
お礼
早速調べてみます。ありがとうございます。