三流君 ken3のmemo置き場

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

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

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

XXXXさんへ 参照設定した変数 As HTMLIFrame を使ってください。


>最後にお願いしたいのですが、私の参照設定を見ていただいて、
>KENさんと何か違うところがあるか見ていただきたいのですが
>お願い出来ますでしょうか?
>(私の参照設定が足りないことを祈りつつ…)
>
>Visual Basic For Applications
>Microsoft Access 12.0 Object Library
>Microsoft Excel 12.0 Object Library
>Microsoft ActiveX Data Objects 2.1 Library
>OLE Automation
>Microsoft Internet Contorols
>Microsoft Forms 2.0 Object Library
>Microsoft Office 12.0 Access database engine Object Library
>Microsoft Visual Basic for Application Extensibility 5.3
>Microsoft HTML Object Library
>Microsoft Office 12.0 Object Library
>Microsoft Scripting Runtime
>Microsoft ADO Ext.2.8 for DDL and Security
>
>そして、KENさんのテストしたHPでも動かして見ましたが、
>やはりエラーになりました。
>エラー内容
>「オブジェクトは、このプロパティまたはメソッドをサポートしていません。」

結論から先に書くと、私のサンプルが間違ってました。※As Objectだと動かないみたいです
※ここから下、原因がわかるまで 長い道のりでした(恥ずかしいけど、そのまま載せておきます。失敗をみなさんの肥やしにしてください・・・)

IEのオプション ゾーン・セキュリティを確認してみては?

インラインフレーム関係にアクセスするとエラーが発生する件ですが、

なんでしょうね。(ぉぃぉぃ)
あとは、セキュリティのレベルくらい?
私のテストは 中高 の デフォルトだと思いますが、
もしかして、ゆるい部分があったのかなぁ。

IEのオプションで、フレーム間のデータやりとりなどのオプションがあるので、確認してみてください。
IE9 インターネットの設定 オプションの確認 - YouTube
www.youtube.com
↑ヘッドセットの調子が悪くて いつもの 熱弁(笑)が入っていませんが・・・

あとは、参照設定の順番で .src が 違う型を指している ってことも無いだろうし
(それは、 ADOとDAOの話で、 As ADODB.Recordset とか.Recordsetがかぶった時の話だし、
 .srcは順番ありそうだけど、.ie8_srcは頭ie8_srcで同じプロパティは無い感じですし)

逆に、一度、参照設定を少なくしてみるとか?
(でも、繰り返すけど .ie8_src は ほかに無いと思うし..)

あとは、.vbs用に少し改造した 下記を走らせてみてください。

test0121.vbs

    'IEのオブジェクトを作成する
    Set objIE = CreateObject("InternetExplorer.application")
    objIE.Top = 250
    objIE.Left = 250
    objIE.Width = 800
    objIE.Height = 400

    objIE.Visible = True

    'ページを開く(.Navigateで表示する。)
    objIE.Navigate "http://dec2011.top1-12.info/test0120.html"

    '読み込み完了となるまで、ループする。
    While objIE.ReadyState <> 4 Or objIE.Busy  'READYSTATE_COMPLETE = 4
        WScript.Sleep  100  '0.1秒待つ 1000で1秒
    Wend

    WScript.Sleep  3000  '3秒 念のため待つ 1000で1秒

    'iframeのタグを集める .getElementsByTagName("iframe")を使用
    Dim objIFRAME
    Set objIFRAME = objIE.document.getElementsByTagName("iframe")

    Dim oHTMLIFrame    'VBSはできないけど HTMLIFrameと参照設定後 型宣言すると便利
   
    Dim n
    For n = 0 To objIFRAME.Length - 1 '配列が0からなので-1
        Set oHTMLIFrame = objIFRAME(n)  'n番目を代入
        Msgbox ".src= " & oHTMLIFrame.src          '相対パスや絶対パス、ソースの文字列
        Msgbox ".ie8_src= " & oHTMLIFrame.ie8_src  'ここに入っているのがiFrameのURL?
    Next
    
'IEを閉じたり、後始末
    'objIE.Quit    'デバックなのでコメントアウト IEを閉じたり、後始末をする

実行結果を見てびっくり

.vbsにして、(vbsだと変数の型が指定できないので)
テストしてみると、実行時エラーが .ie8_src の 部分で発生しました。

VBA IE操作 参照設定後 As HTMLIFrameを使ってください - YouTube
www.youtube.com

あっ、Dim oHTMLIFrame As HTMLIFrame みたいに、型を宣言しないと、
.ie8_src の プロパティが見れないみたいです。

正しいVBAは、※参照設定して Dim oHTMLIFrame As HTMLIFrame を 使ってください。

VBA As HTMLIFrameに変えたソース

Sub ietest_0120_2() 'STOPで止めて、インラインフレームを探る

    Dim objIE As Object

    'IEのオブジェクトを作成する
    Set objIE = CreateObject("InternetExplorer.application")
    objIE.Top = 250
    objIE.Left = 250
    objIE.Width = 800
    objIE.Height = 400

    objIE.Visible = True

    'ページを開く(.Navigateで表示する。)
    objIE.Navigate "http://dec2011.top1-12.info/test0120.html"

    '読み込み完了となるまで、ループする。
    While objIE.ReadyState <> 4 Or objIE.Busy  'READYSTATE_COMPLETE = 4
        DoEvents
    Wend

    'iframeのタグを集める .getElementsByTagName("iframe")を使用
    Dim objIFRAME As Object
    Set objIFRAME = objIE.document.getElementsByTagName("iframe")

    Debug.Print TypeName(objIFRAME(0))  'オブジェクトのタイプを確認。

    Dim oHTMLIFrame As HTMLIFrame   '本当はAs HTMLIFrameと参照設定後 型宣言すると便利
   
    Dim n As Integer
    For n = 0 To objIFRAME.Length - 1 '配列が0からなので-1
        Set oHTMLIFrame = objIFRAME(n)  'n番目を代入
        'Stop  '止めてデバッグモード、ウォッチ式で変数を見ると便利ですよ
        Debug.Print n
        Debug.Print ".src " & oHTMLIFrame.src          '相対パスや絶対パス、ソースの文字列
        Debug.Print ".ie8_src " & oHTMLIFrame.ie8_src  'ここに入っているのがiFrameのURL?
        Debug.Print ".document.URL " & oHTMLIFrame.document.URL  '親のURLだった
        Debug.Print ".document.domain " & oHTMLIFrame.document.domain  '親のドメインだった
    Next n
    
'IEを閉じたり、後始末
    'objIE.Quit    'デバックなのでコメントアウト IEを閉じたり、後始末をする

End Sub

終わりのあいさつ

参照設定や順番? IEオプション じゃなくて、
回り道をしたけど、 As HTMLIFrame の変数なら .ie8_src を見ることができると思います。
※私の最後に書いたサンプルが As Object で 迷惑をかけただけでした反省・・・

Ken3 ホームページ 目次

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

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



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