dポイントプレゼントキャンペーン実施中!

こんばんは。やりたいことができないので教えてください。
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を開く方法をご教授ください!よろしくお願いします。

A 回答 (7件)

navOpenInNewTab


でネット検索するといいことあるかも。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/11/29 20:45

こんにちは。



#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は、直接、コードに書いてもペンディング状態にならないと思います。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/11/30 21:58

[回答番号: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 も開いていない場合の エラー処理 は施しておりません。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/11/30 21:56

●特定の Web サイトに対して開く Internet Explorer ウィンドウがあるかどうかを確認する方法はありますか


http://www.microsoft.com/japan/technet/scriptcen …
によりますと、[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)] - [タブ ブラウズ の設定] ダイアログ に挙げられた設定項目が、ひょっとしたら微妙に関係あるかもしれませんので...。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/11/30 21:54

http://www.happy2-island.com/vbs/cafe02/capter00 …
を参考にすると出来ませんか。
本件詳しくなくて、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つがタブを別にして開くようです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/11/30 21:52

こんばんは。



>しかしエラーにもなりませんが何も起こりませんでした。

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

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

お礼日時:2009/11/29 22:36

こんばんは。



こんな風にすれば、取れます。
なお、それぞれのオブジェクトは、事前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
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/11/29 20:45

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!