お世話になります
webページ内のテキストエリアに入力させたいのですが、
frameがあるページとframeがないページとをどうやって入力させようか悩んでいます
たとえば、frameがないページであれば
ie.Document.all.Item(0).Value = "aaaa"
frameがあるページであれば
ie.Document.frame(0).Document.all.Item(0).Value = "aaaa"
で入力はできるのですが、
frameのあるなしにかかわらず、webページ内のテキストエリアに入力させたいのです。
共通のオブジェクト変数で指定する方法などありますでしょうか?
> ie.Document.frame(0).Document.all.Item(0).Value = "aaaa"
「frame(0)」ではなく、「frames(0)」なのでは。
> frameのあるなしにかかわらず、
frames.lengthで有無を調べ、その中のdocumentを再帰的に処理すれば良いかと。
ありがとうございます。
>frames.lengthで有無を調べ、その中のdocumentを再帰的に処理
具体的にお聞きしてもよろしいでしょうか。
以下のコードなのですが
Sub aaa()
Dim ie As InternetExplorer
Dim myFrames As FramesCollection, myF As Object, i
Dim objINP As Object, OB As Object
Set ie = New InternetExplorer
ie.Visible = True
ie.Navigate "あっち"
Do While (ie.Busy)
Loop
Do While (ie.document.ReadyState <> "complete")
Loop
Set myFrames = ie.document.Frames
If myFrames.Length <> 0 Then
For Each myF In myFrames
Set objINP = myF.document.getElementsByTagName("INPUT")
For Each OB In objINP 'ここのFORと
If OB.Type = "text" Then
If OB.Name = "名前" Then
OB.Value = "ほげほげ"
End If
If OB.Name = "ZIP" Then
OB.Value = "100-0001"
End If
'以下まだまだIFがつづく
End If
Next OB
Next
Else
Set objINP = ie.document.getElementsByTagName("INPUT")
For Each OB In objINP 'ここのFORが上とまったく同じで無駄な記述になってしまう。
If OB.Type = "text" Then
If OB.Name = "名前" Then
OB.Value = "ほげほげ"
End If
If OB.Name = "ZIP" Then
OB.Value = "100-0001"
End If
'以下まだまだIFがつづく
End If
Next OB
End If
End Sub
フレームは、さらに何階層も組まれる事がありますので、
上記のような記述では、対応が難しいと思いますよ。
(実際には、フレームの中に、さらにフレームが存在する事もあります)
下記に、frames内を再帰処理するサンプルがありますので、参考にしてみて下さい。
http://www.bcap.co.jp/hanafusa/vbbbs/wforum.cgi?mode=allread&no=3341
魔界の仮面弁士さま、ありがとうございます。
フレームは1階層だけで十分なので、なんとかなりそうです。
またよろしくおねがいいたします。
解決とさせていただきます
ツイート | ![]() |