電子書籍の厳選無料作品が豊富!

エクセル2003VBAで以下のコードを実行するとBrowser1がエラーとなります。
どなたか解決法がわからないでしょうか。
よろしくお願いします。

\'IEのウィンドウハンドルを取得
Dim hwnd As Long
hwnd = FindWindow(\"IEFrame\", vbNullString)

\'ウィンドウを前面に表示する
If hwnd = 0 Then
MsgBox \"IEが起動していません\"
Exit Sub
End If
SetForegroundWindow hwnd


Dim Browser1 As Object
Dim elm As Object
Dim i As Integer
Const READYSTATE_COMPLETE As Long = 4

\'次の画面が表示されるまで待機
While Browser1.ReadyState <> READYSTATE_COMPLETE
While Browser1.Busy = True
DoEvents
Wend
Wend



Set elm = Browser1.document.getElementsByTagName(\"INPUT\")
For i = 0 To elm.Length - 1
If (elm(i).Name = \"q\") Then elm(i).Focus: Exit For
Next i

A 回答 (2件)

ちょっと調べてましたが、自力で探すしかないようです



http://www.ne.jp/asahi/hishidama/home/tech/excel …
の”既存のIEを探す方法”にサンプルソースとプロパティが載ってます

>このコードを追記してしまうと、ウィンドウが新しく開いてしまいますので、使いたくないのですが。上記のコードでは暴走するのですか。。。
なるほど。
暴走に見えたのですが、IEの起動待ちだったかもしれません
(でも、5分間無反応でした)

参考URL:http://www.ne.jp/asahi/hishidama/home/tech/excel …

この回答への補足

MsgBox elm(i)

MsgBox elm(i).Type
がぬけてました。すみません。

補足日時:2009/07/01 17:41
    • good
    • 0
この回答へのお礼

参考URLありがとうございます!
助かりました☆
以下のコードでなんとかエラー解決できました。

------------------------------------------------------
'SetForegroundWindowの定義
Public Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long

'FindWindow関数の定義
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long


'************************************************************
'IEのウィンドウハンドルを取得
'************************************************************
Dim hwnd As Long
hwnd = FindWindow("IEFrame", vbNullString)
'見つからなければ戻り値0



'************************************************************
'ウィンドウを前面に表示する
'************************************************************
If hwnd = 0 Then
MsgBox "IEが起動していません"
Exit Sub
End If
SetForegroundWindow hwnd




'=============================================
'チェックボックス検索開始
'=============================================
Dim i as Integer
Dim Browser1 As Object
Dim elm As Object
Dim objShell As Object
Dim ShWins As Object
Dim IE As Object
Const READYSTATE_COMPLETE As Long = 4 'IEオブジェクト状態(4=読み込み完了)
Set objShell = CreateObject("Shell.Application")
Set ShWins = objShell.Windows()
For Each IE In ShWins
Set Browser1 = IE
Exit For
Next



'次の画面が表示されるまで待機
While Browser1.ReadyState <> READYSTATE_COMPLETE
While Browser1.Busy = True
DoEvents
Wend
Wend


Set elm = Browser1.document.getElementsByTagName("INPUT")
For i = 0 To elm.Length - 1
'If (elm(i).Name = "q") Then elm(i).Focus: Exit For
MsgBox elm(i)
Next i

------------------------------------------------------

ただ、メッセージボックスに何も表示されないのです。。。
DoEventsってほんとに重いですねぇ。

お礼日時:2009/07/01 17:19

Browser1の設定がないからですね


http://www.ne.jp/asahi/hishidama/home/tech/excel …

Set Browser1 = CreateObject("InternetExplorer.Application")
※上記の追記でBrowser1のエラーはでなくなりましたが、暴走しますよ。。。

参考URL:http://www.ne.jp/asahi/hishidama/home/tech/excel …

この回答への補足

早速のご回答ありがとうございます。

Set Browser1 = CreateObject("InternetExplorer.Application")
このコードを追記してしまうと、ウィンドウが新しく開いてしまいますので、使いたくないのですが。上記のコードでは暴走するのですか。。。

すでに開いているIEの画面上でタグ名を取得していきたいので、
どなたかご存知の方、アドバイスよろしくお願いいたします。

補足日時:2009/07/01 14:58
    • good
    • 0

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