三流君 ken3のmemo置き場

三流プログラマーのメモ書きです。主にVBAやWindowsの話題が多いです

挨拶・自己紹介:
失敗続きのAB型の変わり者 :三流プログラマー Ken3です
フリーのエンジニア・個人事業主です・・と書くと聞こえはイイが(それとなくカッコよく聞こえるが)、 現在は小さな案件の受注請負 と 短期派遣 で 日々つつましく?ほそぼそと暮らしてます。

よく検索されるキーワード: [質問回答XXXXさんへ] [CreateObject] [VBA] [JRA競馬オッズ]

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

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

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

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

現物を見ていないので、なんとも言えませんが、
フレームなら
ブラウザで フレームと中身のソースを確認する - YouTube
www.youtube.com
みたいな感じで、フレームのソースを確認します。

<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操作、フレームの操作をデバック - 三流君 ken3のmemo置き場
http://d.hatena.ne.jp/ken3memo/20110524/1306190154

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

Ken3 ホームページ 目次

分類:HPを大きく分けると4つの柱(分類)です。

  1. [VBA・マクロ プログラミング]の解説
    当店の人気はVBA系のCreateObject("XXXXXX.application")で他のアプリケーションを操作するサンプルが人気です
  2. [プログラマーの愚痴]では、あまり見せたくない三流プログラマーの内面かな。
    三流君を踏み台にする
  3. [古いクラシック ASP(Active Server Pages)]の解説。
  4. [元コンビニ店長時代の話]が弟に巻き込まれ、失敗した脱サラ、畑違い?の仕事で失敗。
主に上記4つの分類でHP作成やメルマガの発行を行ってます。
※更新頻度が落ちていて情報の鮮度が悪いです。



本当に三流なんです(笑):たまにスゴイですねなんて言われることもありますが、
真実は→ [三流君の真実は...] ←を初めに見てくださるとわかると思います。
(からくりは、成功例↑しか載せてなくて ヒドイ失敗例はお蔵入り迷宮入りが多かったりします)