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

三流君 ken3のmemo置き場

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



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

IE操作


>最後にお願いしたいのですが、私の参照設定を見ていただいて、
>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

↑ヘッドセットの調子が悪くて いつもの 熱弁(笑)が入っていませんが・・・

あとは、参照設定の順番で .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

あっ、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 で 迷惑をかけただけでした反省・・・