• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:タグ名取得でエラー)

エクセル2003VBAでタグ名取得でエラー

このQ&Aのポイント
  • エクセル2003VBAを使用してタグ名取得のコードを実行すると、Browser1がエラーとなります。
  • IEのウィンドウハンドルを取得し、ウィンドウを前面に表示します。ただし、起動していない場合はエラーメッセージを表示します。
  • Browser1のReadyStateが完了するまで待機し、次の画面が表示されるのを確認します。その後、Browser1のdocumentからINPUTタグを取得し、タグ名がqである要素にフォーカスを移します。

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

  • ベストアンサー
  • nagare
  • ベストアンサー率33% (280/831)
回答No.2

ちょっと調べてましたが、自力で探すしかないようです http://www.ne.jp/asahi/hishidama/home/tech/excel/browser.html の”既存のIEを探す方法”にサンプルソースとプロパティが載ってます >このコードを追記してしまうと、ウィンドウが新しく開いてしまいますので、使いたくないのですが。上記のコードでは暴走するのですか。。。 なるほど。 暴走に見えたのですが、IEの起動待ちだったかもしれません (でも、5分間無反応でした)

参考URL:
http://www.ne.jp/asahi/hishidama/home/tech/excel/browser.html
ddtqp
質問者

お礼

参考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ってほんとに重いですねぇ。

ddtqp
質問者

補足

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

その他の回答 (1)

  • nagare
  • ベストアンサー率33% (280/831)
回答No.1

Browser1の設定がないからですね http://www.ne.jp/asahi/hishidama/home/tech/excel/browser.html Set Browser1 = CreateObject("InternetExplorer.Application") ※上記の追記でBrowser1のエラーはでなくなりましたが、暴走しますよ。。。

参考URL:
http://www.ne.jp/asahi/hishidama/home/tech/excel/browser.html
ddtqp
質問者

補足

早速のご回答ありがとうございます。 Set Browser1 = CreateObject("InternetExplorer.Application") このコードを追記してしまうと、ウィンドウが新しく開いてしまいますので、使いたくないのですが。上記のコードでは暴走するのですか。。。 すでに開いているIEの画面上でタグ名を取得していきたいので、 どなたかご存知の方、アドバイスよろしくお願いいたします。

関連するQ&A