[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『起動済のIEの任意のタブを取得したい』(ぬるぬる)
ネット上を捜索して、VBA上で既に起動されたIEを発見することはできました。
その上で、既に開かれているタブのタイトルやURLを検索して合致したタブをアクティブにした上で、Navigateしたいと考えております。
タブの検出については下記の記事で同じ投稿があったようですが、本文のリンク先のURLが(自社のアクセス制限で)閲覧不能なため、どのようなコードを掛けば良いのか知りたいのですが、教えて頂けないでしょうか。
[[20091129091530]]
Private Declare Function FindWindow Lib "user32" _
Alias "FindWindowA" ( _ ByVal lpClassName As String, _ ByVal lpWindowName As String) As Long
Function GetIE() As Object
Dim hWnd As Long hWnd = FindWindow("IEFrame", vbNullString) Set GetIE = GetWindowForHwnd(hWnd) End Function
'hWndからウィンドウのオブジェクトを返す
Function GetWindowForHwnd(hWnd As Long) As Object
Dim wn As Object Set GetWindowForHwnd = Nothing For Each wn In CreateObject("shell.application").Windows If wn.hWnd = hWnd Then Set GetWindowForHwnd = wn Exit For End If Next End Function
Sub Sample()
Dim ie As Object Set ie = GetIE() '↓任意のタブ(タイトル名orURLでマッチ)をアクティブにしてからページを移動したい ie.Navigate "http://google.co.jp" End Sub
< 使用 Excel:Excel2016、使用 OS:Windows10 >
Sub test() Const navOpenInNewTab = &H800 Dim W As Object
For Each W In CreateObject("Shell.Application").Windows If W.Name = "Internet Explorer" And W.LocationName = "Google" Then W.Navigate2 "http://www.excel.studio-kazu.jp", navOpenInNewTab W.Quit Exit For End If Next W End Sub (???) 2018/06/21(木) 09:26
>新しいタブで開く事でアクティブにさせ、見つけたタブは閉じてしまう、というのでは駄目でしょうか?
盲点でした。この方法で行きたいと思います。
(ぬるぬる) 2018/06/21(木) 09:45
しかし再取得するためには、Navigate2 の処理の完了待ちをしなければなりません。
完了待ちをするためには、通常こういったコードを書きますが、
Do While ie.Busy = True Or ie.readyState <> 4 DoEvents Loop そもそもieを取得したいわけですから、堂々巡りになってしまいます。 暫定処置として、一定秒数スリープさせてから再取得していますが、出来れば確実に読み込みが終わるのを待ちたいです。
どうか知恵をお貸し下さい。
(ぬるぬる) 2018/06/21(木) 11:20
Sub test() Const cURL = "http://www.excel.studio-kazu.jp/" Const navOpenInNewTab = &H800 Dim W As Object Dim IE As Object
For Each W In CreateObject("Shell.Application").Windows If W.Name = "Internet Explorer" And W.LocationName = "Google" Then W.Navigate2 cURL, navOpenInNewTab Call sWait(W) W.Quit DoEvents Exit For End If Next W
If Not W Is Nothing Then For Each W In CreateObject("Shell.Application").Windows If W.Name = "Internet Explorer" And W.LocationUrl Like cURL Then Exit For End If Next W
If Not W Is Nothing Then Set IE = W MsgBox IE.LocationUrl End If End If End Sub
Sub sWait(OBJ As Object) DoEvents While OBJ.ReadyState <> 4 While OBJ.Busy = True DoEvents Wend Wend End Sub (???) 2018/06/22(金) 09:40
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.