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

解決


さいたま  2003-11-30 09:36:43  No: 80642

お世話になります

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 13:07:35  No: 80643

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

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


さいたま  2003-11-30 20:20:29  No: 80644

ありがとうございます。

>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-12-01 00:14:54  No: 80645

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

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


さいたま  2003-12-01 05:38:48  No: 80646

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

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


さいたま  2003-12-01 05:48:37  No: 80647

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加