• ベストアンサー

IEでForm要素の取得

Dim myIE As Object Dim myTag As Object For Each myTag In myIE.Document.Body.All Debug.Print myTag.TagName Next myTag という感じでループさせFormが出現したら そこで作業をしようと思うのですが、Tableや TR、Aなどはでてきますが、Formはでてきません。 Formを取得するにはどのような方法をとれば いいのでしょうか?

noname#27115
noname#27115

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

  • ベストアンサー
  • piyo2000
  • ベストアンサー率49% (144/293)
回答No.2

#1さんの回答は、「WindowsのForm」についてですから 気にされなくて結構です(^^; >myIE.Document.Formsで取得できることがわかりました。 そこまで行けばあと一息です。 VB6であれば、MSDNライブラリの「document」の項(Internet Explorer:Platform SDK)を読んでみましょう。 そこのCollectionsに「forms」コレクションがありますね。 そこから「FORM」に飛べば、nameやelementsコレクションなどたくさんのコレクション・プロパティがあることが分かります。 Dim myForm as Object For Each myForm In myIE.Document.Forms Debug.Print myForm.name Debug.Print myForm.innerHTML Next myForm

noname#27115
質問者

お礼

どうもありがとうございました。 助かりました。 また、よろしくお願いします。

その他の回答 (1)

  • bob_n
  • ベストアンサー率35% (610/1732)
回答No.1

あまりVBは詳しくないのですが、 http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpwinui/html/_win32_findwindowex.asp APIを使ってハンドルを取得とゆうのではだめですか? "IEFrame"のクラスネームでできるとおもうのですが

noname#27115
質問者

お礼

こんにちは、ありがとうございます。 おしえていただいたページですが、残念ながら 私では理解できませんでした。 ただ、Formの一覧は myIE.Document.Formsで取得できることがわかり ました。 ただ、それぞれのFormのプロパティーについては まだです。(T.T)

関連するQ&A

  • IEの操作(Busy)でエラーになる

    下記コードを実行するとBusyの所でエラーになってしまいます。 何が悪いのでしょうか?教えて下さい。 Excel2000で起動しました。 Sub tst031() Dim fff As String 'ファイルパス Dim objIE As Object 'オブジェクト Dim Myhtml As Variant 'HTMLタグデータ Dim objTAG As Object '制御htmlファイル fff = "http://oshiete.goo.ne.jp/" 'Webページ表示 Set objIE = CreateObject("InternetExplorer.Application") objIE.Navigate fff '画面表示待ち Do While objIE.Busy = True DoEvents Loop For Each objTAG In objIE.document.body.all Debug.Print objTAG.tagName Next objIE.Quit 'MsgBox Myhtml End Sub

  • Shell32ライブラリのインスタンスのオブジェクト

    エクセルからインターネットエクスプローラを操作して、任意のULRをからデータを取得しようと考えています。URLのアドレスとテキスト名を引数として、IEへのオブジェクトを返す関数を作ろうかと思いましたが、一向にうまくいきません。コードの99%は、ネット、雑誌からの引用なので問題はない(継ぎ接ぎ上の問題はあるかと思いますが)と思います。やりたいことは、関数から返されるオブジェクトを使ってのTest()の最後の2行の.body.innerTextと、.body.innerHTMLの取得です。 どなたか詳しい方がいらっしゃいましたら教えてください。よろしくお願いいたします。 Sub test() Dim myIE As Object Dim URL_address As String Dim URL_Title As String Dim IE_Text As String Dim IE_Html As String ULR_address = "http://oshiete1.goo.ne.jp/c232.html" Ulr_Title = "教えて!goo Office系ソフト" myIE = IE_URL(URL_address, Ulr_Title) IE_Text = myIE.document.body.innerText IE_Html = myIE.document.body.innerHTML End Sub Function IE_URL(URL_address As String, URL_Title As String) As Object Dim myIE As SHDocVw.InternetExplorer Dim myIE2 As Object ' 起動しているIEの中にURL_Titleと合致するULRがあるか調べる With New Shell32.Shell For Each myIE In .Windows If UCase(Dir(myIE.FullName)) = "IEXPLORE.EXE" Then If myIE.document.Title = URL_Title Then myIE.Navigate URL_address Exit For End If End If Next End With 'URL_Titleと合致するURLがない場合、新たにIEを立ち上げて表示させる If myIE Is Nothing Then With New SHDocVw.InternetExplorer ' .Navigate URL_address .Visible = True End With Application.Wait Now + TimeValue("00:00:01") 'myIEにオブジェクトをセットさせるために再度全体を検索する(上のwithでオブジェクトを取得できれば不要) With New Shell32.Shell For Each myIE In .Windows If UCase(Dir(myIE.FullName)) = "IEXPLORE.EXE" Then If myIE.document.Title = URL_Title Then myIE.Navigate URL_address Exit For End If End If Next End With End If Set myIE2 = GetObject(myIE.FullName) IE_URL = myIE2 End Function

  • 現在開いている全てのIEのURLのタイトルを取得し

    現在開いている全てのIEのURLのタイトルを取得したいのですが Sub test() Dim shl As Object Dim wnd As Object Dim doc As Object Dim frg As Boolean Set shl = CreateObject("Shell.Application") For Each wnd In shl.Windows() If TypeName(wnd.Document) = "HTMLDocument" Then Set doc = wnd.Document Debug.Print doc.Title Set doc = Nothing End If Next Set shl = Nothing End Sub このコードが If TypeName(wnd.Document) = "HTMLDocument" Then でエラーになる時とならない時があります。 エラーになる時は、 実行時エラー -2147467259 ’Document’メソッドは失敗しました:'IWebBrowser2'オブジェクト となります。 エラーが発生する時としない時の違いが分かりません。 そもそもどういう意味のエラーでしょうか? IE11、オフィス2010です。

  • 現在開いてるIEのタイトルを取得するには?

    Sub test() Dim shl As Object Dim wnd As Object Set shl = CreateObject("Shell.Application") For Each wnd In shl.Windows() Debug.Print wnd.LocationURL Next Set shl = Nothing End Sub ----------------------------------------- これを実行するとIEのURLは取得できますが 画像のようにタイトル部分の文字列を取得したいです。 LocationURLをLocationnameに変えたらエラーになりました。 ご教授よろしくお願いします。

  • 一回のループで次のオブジェクトの値も同時に取得する

    一回のループで次のオブジェクトの値も同時に取得するにはどのようなコードを書けばよいですか? 例えば、 ブックにシートが Sheet1 Sheet2 Sheet3 あり、 Sub Sample1() Dim s As Worksheet For Each s In Worksheets Debug.Print s.Name Next End Sub のように、全てのシート名を取得する場合、 Sheet1とSheet2を1回のループで同時に取得する方法はありますか? Sub Sample1() Dim s As Worksheet For Each s In Worksheets Debug.Print s.Name   Debug.Print s+1.Name Next End Sub みたいな方法があるのか知りたいです。 よろしくお願いします。

  • フレームを使ってるサイトはタグの取得はできない?

    フレームを使ってるサイトは、タグの取得はできないのでしょうか? vbaでieを操作をしていて、サイトにログイン後、 imgタグの中にあるaltの値を取得したいのですが、 For Each myObj In objIE.document.all.tags("img") Debug.Print myObj.alt Next これがスルーされてしまいます。 imgタグがいくつもあるのにスルーされてしまうし、imgタグだけでなくtdタグなどもすべてスルーされます。 その原因はサイトにフレームが使われてるからなのでしょうか? なぜか For Each myObj In objIE.document.all.tags("frame") Debug.Print myObj.Name Next なら値が取得できるんです。 For Each myObj In objIE.document.all.tags("form") Debug.Print myObj.Name Next はダメでした。 いつもなら、ソースにformタグがあれば、これで取得できるのですが・・・

  • VBAで起動しているIEの操作

    IEでOKWAVEを開いていたら イミディエイトウィンドウに タイトルを表示するのに 次の 記述をしましたが エラーになりました。 実行時エラー '-2147467259 (80004005)': 'Document' メソッドは失敗しました: 'IWebBrowser2' オブジェクト なぜでしょうか? IEは11です。 エクセルは2013 OSは windows7 ホームプレミアム vbsは次の通り Sub okwave() Dim colSh As Object Dim win As Object Dim strTemp As String Dim objIE As Object Set colSh = CreateObject("Shell.Application") For Each win In colSh.Windows If TypeName(win.document) = "HTMLDocument" Then If InStr(win.document.Title, "okwave") > 0 Then Set objIE = win Exit For End If End If Next Debug.Print objIE.document.Title End Sub

  • フォーム上の全てのコントロールを取得したい

    フォーム上の全てのコントロールを取得したいです。 (サブフォームも含め) 自分なりにVBAで考えてみたのがこれです。 Sub test() Dim 数 As Long For Each 数 In Form_フォーム1.Controls.Count ’Debug.Print ? End If Next End Sub でもこれだけでもデバックしてみると 「コンハ゜イルエラー for Eachは、コレクション オブジェクトまたは配列でのみ繰り返しを実行します。」 となります。 答えを教えてください! よろしくお願いします。 (アクセス2003です)

  • Internet Explorerの起動状態をチェック

    IEが起動中の時はそれを使い、未起動の場合は新規に作成する、、、というのがしたくて次のようなコードをつくってみました。 ところが、 Set myIE = myShellwindows のところでエラーになります。 これを防ぐにはどのようにするといいのでしょうか? Sub Set_IE() Dim myIE As Object Dim myShellwindows As Object Dim myObject As Object Dim Flag As Boolean Set myShellwindows = CreatmyObject("Shell.Application").Windows() Flag = False For Each myObject In myShellwindows If TypeName(myObject) = "IWebBrowser2" Then Flag = True Exit For End If Next If Flag = True Then Set myIE = myShellwindows Else Set myIE = CreatmyObject("InternetExplorer.application") myIE.Visible = True End If Set myShellwindows = Nothing Set myIE = Nothing End Sub

  • 全てのプリンター名を取得したい

    エクセルで全てのプリンターのプリンター名・ドライバー名・ポート名を取得する コードを実行したいのですが Sub Sample() Dim prtLoop As Printer For Each prtLoop In Application.Printers With prtLoop Debug.Print "Device name: " & .DeviceName Debug.Print "Driver name: " & .DriverName Debug.Print "Port: " & .Port End With Next prtLoop End Sub これをそのまま貼り付けて実行しようとすると、 「prtLoop As Printer」が、ユーザー定義型は定義されていません。 になります。 何に参照設定すればいいのかわからないので、 とりあえず Dim prtLoop As Object にしたのですが、 今度は For Each prtLoop In Application.Printers で 実行時エラー438 オブジェクトは、このプロパティまたはメソッドをサポートしていません。 になります。 どうすればいいか教えてください。

専門家に質問してみよう