読者です 読者をやめる 読者になる 読者になる

三流君 ken3のmemo置き場

メモ置き場、保管庫として利用。まとまっていませんがヨロシク



XXXXさんへ VBAでIE操作 フレームページを探って操作するテスト

前回
XXXXさんへ VBA IE操作で オブジェクト変数または With ブロック変数が設定されていません について - ken3memo (三流君)
http://d.hatena.ne.jp/ken3memo/20111209/1323433071
の続き

>1番と2番をためしましたがダメでした。
>
>ie.document.all("selBrand")(0).selectedIndex = 1
>
>やはりここで
>
>実行時エラー 91
>オブジェクト変数またはWith ブロック変数が設定されていません。
>
>となります。
>
>3 フレームになっていると思います。
>ページは二つの領域に分かれていて、境界線をドラッグして、二つの領域の大きさを
>変えられます。
>フレームの場合どうすればよいのでしょうか?

まず、フレームのソースを確認する

現物を見ていないので、なんとも言えませんが、
フレームなら
ブラウザで フレームと中身のソースを確認する - YouTube

みたいな感じで、フレームのソースを確認します。

<frameset COLS="160,*" FRAMEBORDER=1 BORDER=1 FRAMESPACING=0>
  <frame SRC="http://www.ken3.org/vba/menu-vba.html" NAME="F_MENU">
  <frame SRC="http://www.ken3.org/cgi-bin/test/test068.html" NAME="F_RIGHT">
</frameset>

↑ここの、NAME="xxxx"を調べる※フレームの名前を押さえておく。

手前味噌の解説ページを紹介

次に、見るのが 手前味噌解説ページの

三流君VBAでIE操作 フレーム操作 Document.Frames
http://www.ken3.org/cgi-bin/group/vba_ie_frame.asp

かなぁ。

ポイントは、
参照設定

三流君VBAでIE操作 まずは、参照設定から
http://www.ken3.org/cgi-bin/group/vba_ie_object.asp

してから、

    Dim objFRAME As FramesCollection
    Set objFRAME = objIE.Document.frames  'フレームの代入

    Debug.Print "フレームの数は" & objFRAME.Length

    'ドキュメントオブジェクトの代入
    Dim objDOC   As HTMLDocument      'HTMLドキュメント
    Set objDOC = objFRAME("F_RIGHT").Document 'フレームのドキュメントをセット
    '↑objFRAME(0).DocumentやobjFRAME(1).Documentもアリです
    'Set objDOC = objFRAME(1).Document 'フレーム(1)をセットでも動きます

    '項目名を指定して、データをセットする
    objDOC.all("userid").Value = "Ken3" 'ユーザー名
    objDOC.all("pass").Value = "aaa"    'パスワード
      • -

みたいにして、
Dim objFRAME As FramesCollection
Set objFRAME = objIE.Document.frames 'フレームの代入
↑フレームを代入(いらないかも、今思えば直接 Set objDOC = objIE.Document.frames("F_RIGHT").Documentでいいのかも)
Dim objDOC As HTMLDocument 'HTMLドキュメント
Set objDOC = objFRAME("F_RIGHT").Document 'フレームのドキュメントをセット
↑一度フレームを取り出す。↑ここで、フレームの名前が必要
すると、フレームの先にアクセスできるので、
いままで、 objIE. や ie. でアクセスしたところを
objDOC.all("selBrand").selectedIndex = 1

objDOC.all("selBrand")(0).selectedIndex = 1

深く探って アクセスする感じかなぁ。

終わりのあいさつ

イヤなのが、自動化防止で、ダミーのフレームを作っていたり、
名前が毎回違うフレームにされていると
(証券会社の FXのページで苦労したかなぁ)

先物ページ相手も かなり 大変だと思いますが、
1つ1つ フレームやページ、オブジェクトを探ってみてください。

解決の糸口となれば幸いです。 三流プログラマー Ken3

PS.少し違うけど

少し、アプローチが違いますが、

QA20110523 VBA IE操作、フレームの操作をデバック - ken3memo (三流君)
http://d.hatena.ne.jp/ken3memo/20110524/1306190154

↑も時間のある時に合わせて見てください。