frameのあるなしにかかわらず

解決


さいたま  2003-11-30 00:36:43  No: 80642  IP: [192.*.*.*]

お世話になります

webページ内のテキストエリアに入力させたいのですが、
frameがあるページとframeがないページとをどうやって入力させようか悩んでいます

たとえば、frameがないページであれば
ie.Document.all.Item(0).Value = "aaaa"

frameがあるページであれば
ie.Document.frame(0).Document.all.Item(0).Value = "aaaa"

で入力はできるのですが、
frameのあるなしにかかわらず、webページ内のテキストエリアに入力させたいのです。

共通のオブジェクト変数で指定する方法などありますでしょうか?

編集 削除
魔界の仮面弁士  2003-11-30 04:07:35  No: 80643  IP: [192.*.*.*]

> ie.Document.frame(0).Document.all.Item(0).Value = "aaaa"
「frame(0)」ではなく、「frames(0)」なのでは。

> frameのあるなしにかかわらず、
frames.lengthで有無を調べ、その中のdocumentを再帰的に処理すれば良いかと。

編集 削除
さいたま  2003-11-30 11:20:29  No: 80644  IP: [192.*.*.*]

ありがとうございます。

>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

編集 削除
魔界の仮面弁士  2003-11-30 15:14:54  No: 80645  IP: [192.*.*.*]

フレームは、さらに何階層も組まれる事がありますので、
上記のような記述では、対応が難しいと思いますよ。
(実際には、フレームの中に、さらにフレームが存在する事もあります)

下記に、frames内を再帰処理するサンプルがありますので、参考にしてみて下さい。
http://www.bcap.co.jp/hanafusa/vbbbs/wforum.cgi?mode=allread&no=3341

編集 削除
さいたま  2003-11-30 20:38:48  No: 80646  IP: [192.*.*.*]

魔界の仮面弁士さま、ありがとうございます。

フレームは1階層だけで十分なので、なんとかなりそうです。
またよろしくおねがいいたします。

編集 削除
さいたま  2003-11-30 20:48:37  No: 80647  IP: [192.*.*.*]

解決とさせていただきます

編集 削除