IEのサポートがWindows11で完全終了してしまいましたね。(2021/10/05冒頭に追記)
そんな感じで下記の質問が来たので対応策の参考になれば

下記いただいた質問
>ExcelVBAでデータを集め、競輪予想を作っています。



>さて最近、IEのサポート終了が告知されていますが
>WEBからのデータ取得はどのような対処がベターなのでしょうか?ご意見をお聞かせください。

ベター、ベスト、イロイロな考え方がありますが、
1.MSXML2.XMLHTTP などでHTMLを取得して、CreateObject("htmlfile") を使う
下記の例題動画、なんだか私の解説はイマイチだった・・・やはり、素直にSelenium VBAなのかなぁ。
と思いつつ、冒頭で Set objHTML = CreateObject("MSXML2.XMLHTTP")
でHTMLを取得して、使ったサンプルを紹介してみたり

IEサポート終了後の世界 MSXML2.XMLHTTPとCreateObject("htmlfile")を使用してJRAオッズ取得 ワイドのオッズ取得に挑戦してみた

目次
10:08 2.ワイドのオッズを押す
11:55 2.1 strレースを探し、頭出し?
18:47 3.オッズのテーブルを判断して、Excelにワイドオッズを取得
21:37 3.1 tableのcaptionで判断
28:30 4.ワイドの一番人気を探す
31:17 元に戻って、2.4 2回目以降は、レースを選択
他の動画を見る(YouTubeで再生リストを見る)
↑も参考になれば・・無事に移行できるといいですね。 三流プログラマー Ken3
※ソースコードは[MSXML2.XMLHTTPとCreateObject("htmlfile")を使用してJRAオッズ取得]を見てアレンジしてください。

はじめは[WebBrowserを参照設定]から入り
[VBAでIE操作解説]やってます。
よく使う.Document:の解説から
[.Forms]で入力処理
[.Links]でリンク情報取得
[.Images]で画像の情報
[.Frames]でフレーム処理
[.Script]でスクリプト処理
...など、まだまだ抜けてますが、
手探りで[ヘルプ IEのオブジェクトを探る]
IE,WebBrowser:
[IE プロパティ(各種設定)]
[IE メソッド(イロイロな動作)]
[IE イベント(発生後処理)]
[VBAでIE操作(TOP)]
小さな[IE操作のサンプル]でTEST
次に[少し大きなIEを使ったサンプル]
にチャレンジしたり
[IE関係記事一覧]

[VBA(TOP)]
[三流君(TOP)]

全ての質問には、答えられませんが、リクエストや質問があったら、[作者(三流君)に質問する] から 気軽に送ってください

三流君VBAでIE操作 フレーム操作 Document.Frames

挨拶:VBAで(ExcelやAccessなどから)InternetExplorer WebBrowserを操作してみたいと思います。
ここでは、最近見かけなくなった?フレームページの操作について、少し書いてみます。
※SEOで不利?とかで、最近はフレームを採用したページが減ったけど、SEO気にしないTOPページ以外は、証券会社の発注画面などで多く使われているみたいですね。
※※一画面に(1HTMLファイルに)、同じヘッダー・フッター、ロゴを読み込むよりは、フレーム分けして、内容だけ更新したほうがServerに負荷が少ないから、証券会社の発注ページではFrameを使ったページが多いのかなぁ?と勝手な予想。チリも積もればで、同じ内容をHttpで送信すると莫大な通信量になるし。


.Document.Window が正しい書き方みたいです。2012/02/23 追記・修正

先に

VB2010のWebBrowserを使いブラウザを操作したい。 VB2010を使用.. - 人力検索はてな
http://q.hatena.ne.jp/1314392493#a1097389
↑を見てください。
.Document.Window が 正しいみたいです。
下記の私のサンプルは、たまたま、動いていたみたい(ぉぃぉぃ)
たぶん、VBAで省略したプロパティを勝手に補完してくれたから?
※恥は、そのまま、残しておきます。


百聞は一見に〜、デバック風景

操作動画 http://www.youtube.com/watch?v=P-FC3baJkzo です。

↑こんな感じで、デバック、してます。※わかっててやっているから、で、いきなりこのコードは書けないんだけど、、、
元の質問、[QA20110523 VBA IE操作、フレームの操作をデバック] を見る

まずは、簡単な2分割から

簡単な、基本の2分割から探ってみます

参照設定から探ってみます

汚い手で女の子に触れると嫌がられる?
じゃなくって、
いつも、私は手抜きで、AS Objectとやっているので、
なぜExcelもIEも同じAs Objectなのか?と質問
いっぱいもらうので、
今日は、皆さんが好きな、型をキチント指定して作ってみます。

自分で打ち込みながらやったほうが、力になるので(手抜きの言い訳ですが)

まず、参照設定を行います。


参照設定では、MicroSoft Internet Contorlsを選択します。
(※見つからない場合は Microsoft Browser Helpersがあると思うので設定してください)

次に、変数を宣言します。
dim objIE as 
と打ち込むと、リストから選択できます。

ここで、
Dim objIE As InternetExplorer
と選択します。

↑選択イメージ

そんな感じで、いつもの型が不明のObject型から、
As InternetExplorer と 型を指定してみました。

あとは、普通にオブジェクトを作って代入します。
    'インターネットエクスプローラーのオブジェクトを作る
    Set objIE = CreateObject("InternetExplorer.application")
まぁ、いつも通りですね。

参照設定をしていると、ここからチト違うのが、
    objie.と打ち込むと、プロパティ、メソッドが表示されます。


objIE.Visible = True
もコーディングするのが比較的楽です。

さてと、だったら、Excelのように簡単にいくかなぁ・・・
と思ってたら、ガイドしてくれるのもここまでで、
objIE.Document.
ここまではOKなのに、
Document.と入力しても何も出てこない。

しかたない、F1押しますか、
あらら、いつものヘルプが出ない・・・
う〜ん、どうしましょう・・・

みなさんはF2のオブジェクトブラウザって使ったことある?

みなさんはF2のオブジェクトブラウザって使ったことありますか?

F2を押します(F1の隣って、あたりまえか)
すると、オブジェクトブラウザって画面が表示されると思います。

全てのライブラリから、
SHDocVwを選択します。
すると、
InternetExplorerのメンバーまでは見れるけどその先がまだ見れない・・・

↑InternetExplorerのメンバーまでたどりついた。

まだ何か足りないのね、参照設定でそれらしき物を再度探す。
と、
MicroSoft HTML Object Labrary
なんてのがあるじゃないですか。
※いままで、見逃してた・・読者の皆さんスミマセン。


↑やっと探し当てた、MicroSoft HTML Object Labrary

中身を確認してみると、(F2のオブジェクトブラウザで)
MSHTMLとライブラリを選択、
クラスは、HTMLDocumentを選択すると、
おっ、よく見かけた.Allなんかも出てくるし、
スクロールすると、
framesなんてメンバーが存在する。
^^^^^^
これをクリックすると、
Property Frames AS FramesCollection
読み取り専用 HTMLDocumentのメンバ
なんて感じの説明とリンクが出てくる。


↑HTMLDocumentのframesを選択した画面

まだまだ不明なので、
次に、リンク先のFramesCollectionをクリックして探ってみると、
Class FramesCollection
    MSHTML のメンバ
だってぇ?
オイオイ、頭に戻ったか?(循環参照か?ヘルプのたらいまわし状態?)

でも、FramesCollectionは、
Item と length
をメンバーとして持っているのがわかった。


↑FramesCollectionを選択した画面

Itemは、HTMLを表すのかぁ。
^^^^^^^^^^^^^^^^^^^^^^^^^^
※まぁ、よく考えてみれば、フレームの先はHTMLのドキュメントなので、
 作りはOKなんでしょうね。
  index.html でフレーム分割、
  a.html と b.asp を表示してれば、
  index.htmlのフレーム要素(ITEM)は2個(length)です。
 ITEMの中身はHTMLドキュメントって言ってるよ、
 そりゃそうか、フレームで分割されていても、
 item(0)はa.html item(1)はb.aspなんだから、
  フレームのアイテムは、HTMLドキュメントと言ってるのは。
 ↑ゴメンなさい、少し文章変ですよね。

フレーム処理に各Objectの型をキチント指定しながら挑戦

日本語、私、うまく書けないので、
みなさんと共通に話せると思う、
VBAって言語を混ぜて説明するので、
聞いてくださいね。

オイオイ(笑)単なるソースを紹介って言えよボケ。

簡単なIE関係の型を使った解説を始めます。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
まず、普通のフレーム無しのHTMLから。
http://www.ken3.org/cgi-bin/test/test068.html
がログインの処理画面です。

ユーザー名にKen3
パスワードにaaa
と入力してみます。

test068.htmlのHTMLソース(途中まで)は、
<html>
<head>
<title>けんぞうのへんてこな世界へようこそ</title>
</head>
<body bgcolor=#ffffff text=#000000>
<center>
<h2>けんぞうのへんてこな世界へようこそ</h2>
<br>
<table bolder=1>
<FORM ACTION="test068-1.asp" METHOD="POST">
USER ID:<INPUT TYPE="text" NAME="userid" SIZE="12"><br>
パスワード:<INPUT TYPE="password" NAME="pass" SIZE="12"><br>
<INPUT TYPE="submit" NAME="btn01" VALUE="ログイン">
<INPUT TYPE="reset"  VALUE="クリア">
</FORM>
</table><br>
<a Href="test068-2.asp" TARGET="_top">新規ユーザー登録</a><br>
</center>
<br>
  ・
 ・
と
USER ID:<INPUT TYPE="text" NAME="userid" SIZE="12"><br>
パスワード:<INPUT TYPE="password" NAME="pass" SIZE="12"><br>
が、入力エリアです。

これに対して、(このHTML入力フォームに対して)
入力処理で下記のプログラムを作りました。
No.105 VBAからIE操作 .document.forms(0).Submit でフォーム送信処理
 http://www.ken3.org/vba/backno/vba105.html
では、
Sub ie_test()

    Dim objIE    As Object  'IEオブジェクト参照用

    'インターネットエクスプローラーのオブジェクトを作る
    Set objIE = CreateObject("InternetExplorer.application")
    
    objIE.Visible = True '見えるようにする(お約束)

    '文字列で指定したURLに飛ぶ
    objIE.Navigate "http://www.ken3.org/cgi-bin/test/test068.html"

    '表示終了まで待つ
     Do While objIE.Busy = True
         '何もしないループ(笑)
         DoEvents
     Loop

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

     'フォームをSubmitする
     objIE.document.forms(0).Submit

End Sub
と、 '項目名を指定して、データをセットする objIE.document.all.userid.Value = "Ken3" 'ユーザー名 objIE.document.all.pass.Value = "aaa" 'パスワード みたいにセットしてました。 これを、 MicroSoft Internet Contorls MicroSoft HTML Object Labrary の 2つ参照設定を行い、 ~~~~~~~~~~~~~~~~~~~~ オブジェクト変数の型をキチント指定して書いてみます。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Sub ie_test()

    Dim objIE    As InternetExplorer   'IEオブジェクト参照用

    'インターネットエクスプローラーのオブジェクトを作る
    Set objIE = CreateObject("InternetExplorer.application")
    objIE.Visible = True '見えるようにする(お約束)

    '文字列で指定したURLに飛ぶ
    objIE.Navigate "http://www.ken3.org/cgi-bin/test/test068.html"

    '表示終了まで待つ
    Do While objIE.Busy = True
        '何もしないループ(笑)
        DoEvents
    Loop

    'ドキュメントオブジェクトの代入
    Dim objDOC   As HTMLDocument      'HTMLドキュメント
    Set objDOC = objIE.Document

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

End Sub
ポイントは、 ~~~~~~~~~~~~ Dim objDOC As HTMLDocument 'HTMLドキュメント と、 HTMLのドキュメント型にしてから、 ^^^^^^^^^^^^^^^^^^^^ Set objDOC = objIE.Document で、IEのドキュメントを代入しました。 それから、参照は、 objDOC.all("userid") や objDOC.all("pass") のように、項目名で参照してみました。 フォームのコレクションに番号でアクセスするのと、 名前でアクセスするのに似てますね。 次は、フレームのチェック。 ^^^^^^^^^^^^^^^^^^^^^^^^^^ http://www.ken3.org/vba/test116.html に、フレーム用のHTMLを作りました。 <html> <HEAD> <TITLE>三流君 VBAで楽しくプログラミング</TITLE> </HEAD> <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> </html> フレームの名称は、F_MENUとF_RIGHTで左右に割ってみました。 さてと、フレームは、 Property Frames AS FramesCollection だったっけ? コイツを使用して、
Sub ie_fream()

    Dim objIE    As InternetExplorer   'IEオブジェクト参照用

    'インターネットエクスプローラーのオブジェクトを作る
    Set objIE = CreateObject("InternetExplorer.application")
    objIE.Visible = True '見えるようにする(お約束)

    '文字列で指定したURLに飛ぶ
    objIE.Navigate "http://www.ken3.org/vba/test116.html"

    '表示終了まで待つ
    Do While objIE.Busy = True
        '何もしないループ(笑)
        DoEvents
    Loop
    
    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"    'パスワード

End Sub
ポイントは、 ~~~~~~~~~~~~ Dim objFRAME As FramesCollection で、 フレーム用のオブジェクト変数を作成して、 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Set objFRAME = objIE.Document.frames 'フレームの代入 で、フレームを代入 おまけで、 Debug.Print "フレームの数は" & objFRAME.Length と、.Lengthでフレーム数を表示して、 あとは、 'ドキュメントオブジェクトの代入 Dim objDOC As HTMLDocument 'HTMLドキュメント HTMLのドキュメントに、 Set objDOC = objFRAME("F_RIGHT").Document 'フレームのドキュメントをセット と "F_RIGHT"とフレーム名称を指定したフレームのドキュメントを代入してます。 objFRAME(0).Document objFRAME(1).Document など、番号で参照も可能です。 ※0から始まり、.Lengthでフレーム数がわかります。 こんな感じで、フレームは、 objIE.Document.frames だったんですね。 いろいろと型を指定して、代入して、遊んでみました。

孫フレーム、フレームの中でさらにフレーム

複数フレームの処理を書く
上下や左右の単純な2分割じゃなくて、証券会社のページは分割の分割・・になってます。
基本は、2分割の応用で、

ここからした、サンプルを作って、速めに書き込む
※現在作成中です、少々お待ちを。

逃げるように 終わりの挨拶

入り口を間違えないで、みなさんは参照設定から行ってくださいね。
※まだまだ、確認すること、やることいっぱいだぁ。。。



[#BackNoLink][ページ内のTOPへ戻る]

過去のメールマガジンのリンクが長かったので、下記に移動しました。
[IE操作 メルマガ 一覧]
よろしくお願いします。


改版履歴 更新情報:過去のIE操作の解説はこちら↓(IE6+XP,IE7+XPの古い記事もアリ)
2009-12-01:[過去の解説 vba_ie_20091201.asp]
2009-06-01:[過去の解説 vba_ie_20090601.asp]
2009-02-01:[過去の解説 vba_ie_20090201.asp]
2008-05-01:[過去の解説 vba_ie_20080501.asp]
2007-08-31:[過去の解説 vba_ie_20070831.asp]
2007-05-20:[過去の解説 vba_ie20070520.asp]

2012-03-19:[過去の解説 vba_ie_20120319.html]
もあわせてみてください。
(↑もしかして書き直さない過去の解説の方がよかったかも?(笑))



[ページ内のTOPへ戻る]

ページフッター

Googleで情報を探す

せっかくホームページに来ていただいたのに、検索の紹介 ぉぃぉぃ
サイト指定や期間の指定を組み合わせて実行してみてください。

Google
探す言葉:
ググる。↑VBAなど 気になる単語や,オブジェクト(MailItem),プロパティ(.Body)やメソッド(.Move)などを入れて検索してみてください。

サイト指定:人気QAサイト や 一次情報MS本家を指定する
条件無し WWW 全体から検索も良いけど↓で絞り込むのもおススメです
一次情報・二次情報まとめから探る
一次情報は基本のMSDN含む microsoft.comから
まとめ一次・二次情報 Qiita 知識を記録・共有 qiita.comで個人まとめを参考に
手前味噌の三次情報 三流君メモBlog ken3memo.hatenablogから検索
QAサイトの質問から探る
QAはやっぱり人の多いYahoo知恵袋 chiebukuro.yahoo.co.jpから探る
こちらもどうぞ おしえてgoo! oshiete.goo.ne.jp
15分探して見つからなかったら?回答率90%以上 teratail.com
私も利用中 最近過疎ってる失礼 人力検索 q.hatena.ne.jp
意外と穴場? 2ch 5ch.netから探す
検索実行: ←オプション確認後に検索ボタンを押してください

期間指定:情報の鮮度も大切?
指定なし(全て)※不変の情報を得るには指定無しが一番?
3日以内 最新の更新情報を探す時など。
3ヶ月 これはあまり使わないかも
1年以内の更新なら情報鮮度もOK?バランス型
3年も経てばOfficeもバージョンUP?
検索実行: ←オプション確認後に検索ボタンを押してください

メッセージ送信

ここまで、読んでいただきどうもです。ここから下は、三流君宛のメッセージ送信や 三流君のホームページの紹介・案内です
目的の情報が見つかったか?少々心配しつつ、、、

感想や質問・要望・苦情など 三流君へメッセージを送る。
下記のフォームからメッセージを送ることができます。


あなたのお名前(ニックネーム):さん
返信は?:


アドレス:に返事をもらいたい
感想や質問↓:


対応速度・緊急度:
(回答・感想は下記のようにしてHPで記事に載せてます) 例:[XXXXさんへ回答例]←みたいに回答していたり...
とても急ぎで連絡がほしい、そんな時は:[twitter三流君DM]に気軽に連絡してください。

[三流君(TOPへ)] / [VBAで楽しく] / [記事一覧]
カスタム検索