[トップページ] / [サンプル一覧へ]

2009-03-16 三流解説 VBA IE Webページの表を取り込む サンプルプログラム

Web から イロイロな表を取り込みたい。全てはここから始まった。。。

サンプルファイル:[IE_GET_TABLE_0316.zip]←今回作ったサンプルの IE_GET_TABLE_0316.xls です。

最新情報と作成履歴は→[更新履歴と最新を表示]


ユーザーの要望を聞き、設計を開始する

Webクエリーを使え と お叱りを受けそうですが、
今回、Webページの表 を Excel シートに取り込みたいと思います。
目的は : Webページ から 目的の表をシートに取り込む。
(日本語で書くと、なんて幅が広いんだろう・・・)

いいかげんな 基本設計

基本設計・要求設計を兼ねて、 ^^^^^^^^^^^^^^^^^^ システム名:Webページの表を取り込む サンプルプログラム 概要: Excel と IE を使用して、Webページを表示させ、表(TABLE)をシートに取り込む。 要求仕様・機能:    1. URLを入力したら、そのページが表示される    2. 指定した 表をシートに取り込むことができること。 必要な環境 : Excel と IE (← ここに わざと バージョンとOSを今回は書きません 後のお楽しみ) 作業日数・費用: 開発スケジュール: ↑こんな概要・要求設計だと、見積もり誤差が、、、あとあと、要求が増えないように(笑) さてと、発注されたら、詳細設計に入りますか。 03/16 VBA IE 表の取り込み 基本設計書 要求設計書 http://www.youtube.com/watch?v=a3aTClOAlUQ

さらにいいかげんな 詳細設計

詳細設計 ^^^^^^^^ ファイル一覧 : なし ファイルの設計は無し ファイルI/Oイメージ: 無し ファイル詳細 : 無し 画面一覧: シート名:MENU (※画面は使わずにシートにボタンを配置、セルの値をパラメーターにします) 画面遷移図: 1画面なので無し (まぁ、IEが起動して、表を取るんだけど。。。) 画面詳細(入出力) オブジェクトの説明(入力・処理・出力) C8 : 目的のURL C10 : 表の1行目 タイトルの識別文字列 (TH見出しや TD表のデータ で キーにできる文字列) 機能の説明 機能001-01 URL表示機能 : Web表示 の ボタンが押されたら、 C8のアドレスを使い ページを表示する。              ※ユーザーがページ項目を確認するため。確認してC10にセットしたり。 機能001-02 表の取り込み機能 : 表の取り込みボタンが押されたら、 C8のアドレスが指すページを表示し、C10に設定された文字列を条件にして、 表の1行目 TH,TDのタグから目的の表を割り出し(判断して)、表をシートに取り込む。 03/16 VBA IE 表の取り込み 詳細設計書 テスト仕様書 http://www.youtube.com/watch?v=vNP1XZmdhBQ

プログラムの作成に入る

上記のかなりラフな設計から、プログラムの作成に入ります。
こんなんで、作成できるのか?なんて声が聞こえてきますが、
コーディング を 始めますか。 各機能 に対して、処理を記述します。

機能001-01 URL表示機能

機能001-01 URL表示機能 : Web表示 の ボタンが押されたら、 C8のアドレスを使い ページを表示する。              ※ユーザーがページ項目を確認するため。確認してC10にセットしたり。 C8に入力されているアドレスを使用した インターネットブラウザ IEの表示 なので、簡単に Shell 関数で 作ってみました。 'C8に入力されているアドレスを使用して 'インターネットブラウザ IEを表示する
Sub shell_ie()

    Dim strURL  As String      'URL保存用

    strURL = """" & Range("c8").Text & """"  'URLをC8から取得する

    Call Shell("explorer.exe " & strURL, vbNormalFocus)

End Sub
↑ポイントは、"""" & Range("c8").Text & """" です。 ダブルコーテーション2つで1つの文字を表すことができます。 コレを利用して、 "http:〜" を Shell関数を使って、 explorer.exe に渡します。 こんな感じで、C8に代入された URLを使って、IEを起動することができました。 03/16 URL を指定して IEをShell関数で起動する http://www.youtube.com/watch?v=et2GPUioe80

機能001-02 表の取り込み機能

表の取り込み機能 : 表の取り込みボタンが押されたら、           C8のアドレスが指すページを表示し、C10に設定された文字列を条件にして、 表の1行目 TH,TDのタグから目的の表を割り出し(判断して)、表をシートに取り込む。

TABLE オブジェクトの事前調査

開発前に、事前準備で、使えそうなオブジェクトを探ってみます。 Set objTABLE = objIE.document.all.tags("TABLE") '.tags("TABLE")でTABLEタグを抜く で、 ドキュメントから TABLEタグを取り出します。 次にいつものように STOP でとめて、テーブルを探ってみました。 今回は、イミディエイト と ウォッチ式 を使って ツリー状のオブジェクトを上から下に探ってみました。 探っていて、面白かったのは、 ? objTABLE(2).rows(1).cells(1).innertext みたいに、 Rows や Cells などが使えそうなところです。※組み合わせて使ってみたいと思います。 03/16 VBA IE 表を取り込む STOPで止め TABLEを探る http://www.youtube.com/watch?v=U8M6423Io6I

骨組みを詳細設計から拾い肉付けする そんなプログラム作成

上↑の事前調査で、 Rows や Cells が使えそうなので、さっそく使ってみます。 詳細設計を見ながら、まずは、箇条書きかなぁ。 ※コメントにして、詳細設計書の機能を日本語でそのまま書きます。
Sub Web_Get_Table_test0317()

    'IE起動
    'C8のURLを表示する
    'テーブルを探す
    '1行目のデータを取り出す。
    '    TH TD の 項目とC10の条件を比較して目的の表か判断。
    '    目的の表を見つけたらシートに書き出す。
    '※テーブルが見つからない時は、エラーメッセージを表示

End Sub
↑次に、肉付け、こんな感じで 骨組み↑を書いてから、肉付けするのも一つの手です。 03/17 VBA IE 表を取り込む 箇条書きから始める? http://www.youtube.com/watch?v=fn3xy7w5Bws
全部書いてからテストする人と、 泥縄式で 実行・テスト、修正・実行を繰り返す、そんな人も居ます。 過去のプログラムを参考にしながら(貼り付けながら)、作っていきます。 'C8のURLを表示 'C10の条件でテーブルを探す
Sub Web_Get_Table_test0317()

    'IE起動
    Dim objIE    As Object  'IEオブジェクト参照用
    Set objIE = CreateObject("InternetExplorer.application") 'IEのオブジェクトを作る
    objIE.Visible = True '見えるようにする(お約束)
    
    'C8のURLを表示する
    '.Navigate で 指定した文字列のURLを開く
    objIE.Navigate Range("c8").Text
    
    '表示終了まで待つ .Busy(忙しい)間 と.ReadyState(ステータス)が4以外の時 ループ
    Do While objIE.Busy = True
         DoEvents  '特に何もしないで.Busyの状態が変わるまで待つ
    Loop
    Do While objIE.ReadyState <> 4
         DoEvents  '特に何もしないで.ReadyStateの状態が4に変わるまで待つ
    Loop
    
    
    'テーブルを探す
    '1     行目のデータを取り出す。
    '    TH TD の 項目とC10の条件を比較して目的の表か判断。
    '    目的の表を見つけたらシートに書き出す。
    '※テーブルが見つからない時は、エラーメッセージを表示

    
End Sub
03/17 VBA IE 表を取り込む 過去のコードをコピー使用 http://www.youtube.com/watch?v=6rg0OMKOHqk ※↑これをやるから、過去の潜在的なバグも一緒に未来のシステムへ移植される・・・
次は、やっと、テーブルの取出しです。 タグの取出しが、.tags("タグの名前")でできるので、 Dim objTABLE As Object 'TABLEの格納用 Set objTABLE = objIE.document.all.tags("TABLE") '.tags("TABLE")でTABLEタグを抜く ↑テーブルを取り出す。↓で作りました。 'テーブルを探す 'タグの取出しが、.tags("タグの名前")でできるので、 Dim objTABLE As Object 'TABLEの格納用 Set objTABLE = objIE.document.all.tags("TABLE") '.tags("TABLE")でTABLEタグを抜く '↑テーブルを取り出す。 'テーブルの有無を確認 If objTABLE.Length = 0 Then 'メッセージ表示 MsgBox "テーブルがありません" 'IE を 閉じるか確認 If MsgBox("IEを閉じますか?", vbYesNo) = vbYes Then objIE.Quit '.Quitで閉じる End If Exit Sub End If 03/17 VBA IE 表を取り込む テーブルの取出し http://www.youtube.com/watch?v=MFIOLfbldbA
次は、 '1行目のデータを取り出す。 ' TH TD の 項目とC10の条件を比較して目的の表か判断。 です。 事前調査で探って、使えそうなのが、 ? objTABLE(2).rows(1).cells(1).innertext なので、これを使ってループでまわして、みたいと思います。 '1行目のデータを取り出す。 ' objTABLE(n).rows(0).cells(x).innertext Dim n As Integer 'n番目の表 Dim x As Integer '列の管理 For n = 0 To objTABLE.Length - 1 'テーブルの数ループする。 Debug.Print "n = " & n Debug.Print "列数は .Rows(0).Cells.Length = " & objTABLE(n).Rows(0).Cells.Length For x = 0 To objTABLE(n).Rows(0).Cells.Length - 1 '列数分ループ Debug.Print objTABLE(n).Rows(0).Cells(x).innertext '中身をテスト表示 Next Next 配列が0から始まっているので、 .Rows(0) が 1行目です。 あとは、1行目 の x列.テキスト って感じで、 Debug.Print objTABLE(n).Rows(0).Cells(x).innertext でテストしました。 03/17 VBA IE 表を取り込む 1行目のデータをテスト表示 http://www.youtube.com/watch?v=gOXxwJgsCis
あとは、テーブルの値と条件(C10)を比べて、取り込む表を確定させます。 objTABLE(n).Rows(0).Cells(x).innertext と Range("c10") を 素直にIf文で比べます。 ひとつ、見つけた時の判断と、後の書き出しで使いたいので、 Dim nTARGET As Integer '見つけた表の番号 ↑の変数を1つ作ります。 nTARGET = -1 '初期値を見つからなかった-1とする For n = 0 To objTABLE.Length - 1 'テーブルの数ループする。 Debug.Print "n = " & n Debug.Print "列数は .Rows(0).Cells.Length = " & objTABLE(n).Rows(0).Cells.Length For x = 0 To objTABLE(n).Rows(0).Cells.Length - 1 '列数分ループ Debug.Print objTABLE(n).Rows(0).Cells(x).innertext '中身をテスト表示 'Cells(x) と C10の条件を比較して目的の表か判断。 If objTABLE(n).Rows(0).Cells(x).innertext = Trim(Range("c10").Text) Then nTARGET = n '表の番号をセット保存。 Exit For End If Next If nTARGET <> -1 Then Exit For '見つけられたら抜けるよ。 Next If nTARGET = -1 Then '見つからなかったか? '※テーブルが見つからない時は、エラーメッセージを表示 MsgBox "見つかりません" Else '見つかった時 '目的の表を見つけたらシートに書き出す。 Stop End If ↑単純に、If objTABLE(n).Rows(0).Cells(x).innertext = Trim(Range("c10").Text) で判断して、 nTARGET = n で、見つけた表の番号をセット保存。 して、Exit For で ループを抜けました。 ※表を見つけたので、やっと書き出せるかなぁ。。。 03/17 VBA IE 表を取り込む セルC10と一致する表を探す http://www.youtube.com/watch?v=DODydCiDMgg
やっと、表の書き出し処理です。 nTARGET に 書き出す表の番号が保存されているので、 objTABLE(nTARGET).Rows(y).Cells(x).innertext ↑こんな感じで、値を取り出しセットしてみたいと思います。 '目的の表を見つけたらシートに書き出す。 Sheets("TABLE").Select 'シートを切り替える Cells.Select Selection.Delete Shift:=xlUp Range("B2").Select For y = 0 To objTABLE(nTARGET).Rows.Length - 1 '行のループ For x = 0 To objTABLE(nTARGET).Rows(y).Cells.Length - 1 '列数分ループ Cells(y + 1, x + 1) = objTABLE(nTARGET).Rows(y).Cells(x).innertext Next Next ↑単純に y,x の ループを作り、データを Cells(y + 1, x + 1) = objTABLE(nTARGET).Rows(y).Cells(x).innertext でセットしました。 y+1,x+1 は、Excelセルの番地は1から始まっているので、調整でセットしました。 03/17 VBA IE 表を取り込む Webの表をシートに書き出す http://www.youtube.com/watch?v=cxdPQGNCA1c

肉付けされた 結果(完成)

やっと、完成しました。
日本語の箇条書きから、けっこう厚さが増しました・・・

'C8のURLを表示
'C10の条件でテーブルを探す

Sub Web_Get_Table_test0317()

    'IE起動
    Dim objIE    As Object  'IEオブジェクト参照用
    Set objIE = CreateObject("InternetExplorer.application") 'IEのオブジェクトを作る
    objIE.Visible = True '見えるようにする(お約束)
    
    'C8のURLを表示する
    '.Navigate で 指定した文字列のURLを開く
    objIE.Navigate Range("c8").Text
    
    '表示終了まで待つ .Busy(忙しい)間 と.ReadyState(ステータス)が4以外の時 ループ
    Do While objIE.Busy = True
         DoEvents  '特に何もしないで.Busyの状態が変わるまで待つ
    Loop
    Do While objIE.ReadyState <> 4
         DoEvents  '特に何もしないで.ReadyStateの状態が4に変わるまで待つ
    Loop
    
    'テーブルを探す
    'タグの取出しが、.tags("タグの名前")でできるので、
    Dim objTABLE As Object 'TABLEの格納用
    Set objTABLE = objIE.document.all.tags("TABLE")  '.tags("TABLE")でTABLEタグを抜く
    '↑テーブルを取り出す。
    
    '1行目のデータを取り出す。
    ' objTABLE(n).rows(0).cells(x).innertext
    Dim n As Integer  'n番目の表
    Dim x As Integer  '列の管理
    Dim y As Integer  '行の管理
    Dim nTARGET As Integer  '見つけた表の番号
    
    nTARGET = -1   '初期値を見つからなかった-1とする
    For n = 0 To objTABLE.Length - 1  'テーブルの数ループする。
        Debug.Print "n = " & n
        Debug.Print "列数は .Rows(0).Cells.Length = " & objTABLE(n).Rows(0).Cells.Length
        For x = 0 To objTABLE(n).Rows(0).Cells.Length - 1  '列数分ループ
            Debug.Print objTABLE(n).Rows(0).Cells(x).innertext '中身をテスト表示
            'Cells(x) と C10の条件を比較して目的の表か判断。
            If objTABLE(n).Rows(0).Cells(x).innertext = Trim(Range("c10").Text) Then
                nTARGET = n  '表の番号をセット保存。
                Exit For
            End If
        Next
        If nTARGET <> -1 Then Exit For  '見つけられたら抜けるよ。
    Next
    
    If nTARGET = -1 Then  '見つからなかったか?
        '※テーブルが見つからない時は、エラーメッセージを表示
        'メッセージ表示
        'IE を 閉じるか確認
        If MsgBox("テーブルが見つかりません" & vbCrLf & "IEを閉じますか?", _
                   vbYesNo) = vbNo Then
            Exit Sub  '何もせず関数を抜ける。IEを閉じない
        End If
    Else  '見つかった時
        '目的の表を見つけたらシートに書き出す。
        Sheets("TABLE").Select  'シートを切り替える
        Cells.Select
        Selection.Delete Shift:=xlUp
        Range("B2").Select
        
        'Webの表をシートへ転記(代入する)
        For y = 0 To objTABLE(nTARGET).Rows.Length - 1  '行のループ
            For x = 0 To objTABLE(nTARGET).Rows(y).Cells.Length - 1  '列数分ループ
                Cells(y + 1, x + 1) = objTABLE(nTARGET).Rows(y).Cells(x).innertext
            Next
        Next

    End If
    
    '終了処理
    objIE.Quit  'IEを閉じる
    Set objIE = Nothing   '変数の後始末
    
End Sub
03/17 VBA IE 表を取り込む 初期バージョン 完成? http://www.youtube.com/watch?v=EYUM-K7TTDA

テストのケース シナリオを作る

次は、テストの仕様書 と 簡単なシナリオを考えます。
通常は、詳細設計書などから鏡のように作ったパターン

総合テストの勝手なストーリーを作ったテスト、そんな感じで行います。

↓えっ、たった2ケースしか作成しないのかよ・・・あきらかにテストの量が不足してるよねぇ。。。

テストケース1 www.ken3.org	

動作(確認操作)	
C8に	http://www.ken3.org/cgi-bin/cnt/top100.asp
C10条件	ア.日付 を入力
	イ.訪問者を入力

確認事項(確認方法)	
 ・シートを見て表の取り込みを確認する	

テストケース2 yahoo.co.jp  スポーツ 打撃成績	

動作(確認操作)	
C8に 	http://baseball.yahoo.co.jp/npb/stats/stats_c_bat_avg.html
C10条件	順位を入力


確認事項(確認方法)	
 ・セリーグ 打者の表がとれる か 確認する。	


03/17 VBA IE 表を取り込む テスト実施 と バグ発見
http://www.youtube.com/watch?v=rwpNaDCsgXI



テスト結果を報告する

テスト結果、OK 打ち上げ行きましょうと報告したいところですが、
バグがありました。

バグを報告します。

バグ001: セリーグの打撃成績の表が取り込めない

内容: C8のURLに http://baseball.yahoo.co.jp/npb/stats/stats_c_bat_avg.html C10の条件に[ 順位 ]と入力し、表を取り込みます。 すると、表が見つかりません の メッセージが表示される。 ※再現性 あり 必ず 原因: 順位を縦に表示するために、 [ 順<BR>位 ] となっている。 対策・対応 改行コードを除いてから 文字列の比較を行うように プログラム修正。 ↑、 原因が 表を見やすくするために <BR> で 改行してたので、 文字列の比較前に vbCr と vbLf を ""にReplace関数で置き換えて除外しました。 strMOJI = objTABLE(n).Rows(0).Cells(x).innertext '値を代入 strMOJI = Replace(strMOJI, vbCr, "") '改行コードを消す 0x0d 0x0a strMOJI = Replace(strMOJI, vbLf, "") If strMOJI = Trim(Range("c10").Text) Then 03/17 VBA IE 表を取り込む バグ001 BR改行に対応 http://www.youtube.com/watch?v=HJcCnoGt5pE

[#BUG002_Vista_IE7]

バグ002: Windows Vista IE7 Excel2007で動作しない

内容: Windows Vista IE7 Excel2007で動作しない
   とにかく動かしてみればわかるって。動かないから・・・

      三流開発者:Windows XP IE7 Excel2003 では、動いたのになぁ・・・
              と、思いつつ、実際に動かしてみた。
              あれ、動作しないで、ループしてるよ・・・
              2つIEが起動している。

原因: Vista IE7の保護モードで保護されていて、
      .Navigate が 失敗するみたい。

処置: 一番簡単な処置は、保護モードを外すことです。
   (せっかく、保護されているのに外したら、ほかで影響するだろ)
      二番目の逃げ手は、自分が表を取り込むサイトは安全だと仮定して、
   信頼済みのサイトに登録してもらうことかなぁ。
   ※これも、面倒だし、信頼済みサイトがのっとられたら・・を考えると却下かなぁ。
↓現物を確認してみてください。
03/18 VBA IE 表を取り込む バグ002 VistaでIE操作不可
http://www.youtube.com/watch?v=2hX7yAU9_Ew

Vista IE7 対応で小細工、起動方法の変更

原因: Vista IE7の保護モードで保護されていて、
      .Navigate が 失敗するみたい。
↑なので、起動方法を
IEをShell関数とexplorer.exeを使い 指定したURLをIEで起動
起動後(ここでは、手抜きでn秒待ちとしたけど、)
    'シェルのオブジェクトを作成する
    Set objSHELL = CreateObject("Shell.Application")
    '起動した IE が 必ず 絶対 一番後ろ と決め付けて(プログラマーに絶対は無いだろクソ三流)
    Set objIE = objSHELL.Windows(objSHELL.Windows.Count - 1)
    '↑配列が0からなのでカウント-1 一番後ろのWindowをobjIEに代入
↑みたいに、最近起動したIE が 必ず 絶対 一番後ろ と決め付けて処理してみました。
↓修正したソースと実行結果の動画を載せます、確認してみてください。

'C8のURLを表示
'C10の条件でテーブルを探す
'見つかったテーブルを シート名:TABLE に書き込む
'Vista で 動かすために、初期表示 と objIEの作り方を変更 2009/03/18

Sub Web_Get_Table_test0318_Vista()

    Dim objSHELL   As Object   'Shell.Application
    Dim objWINDOW  As Object   '.Windows
    Dim Wait_Time  As Date     '時間待ちで使う
    
    Dim objIE      As Object   'IEオブジェクトを格納する

    'IEをShell関数とexplorer.exeを使い 指定したURLをIEで起動
    Call Shell("explorer.exe """ & Range("c8").Text & """", vbNormalFocus) 'セルC8の値でIEを起動する
    '↑C8のURLを表示する ↑
    '.Navigate で 指定した文字列のURLを開く
    'objIE.Navigate Range("c8").Text   '通常は..Navigateだけど、今回は、Shellで起動。。。

    '↑の起動待ち↓なんか、止まった感じがしてイヤなんだけど。。。
    Wait_Time = DateAdd("s", 6, Now())  '6秒後を  DateAddで計算
    Do While Now() < Wait_Time  '現在時刻が↑より小さい間 バカみたいに空回り(時間待ち)
        DoEvents
    Loop
    '↑ホントはShell関数とexplorer.exeでIEが完全に起動するまで待ちたいんだけどなぁ・・・
    '※三流コードサンプルからアレンジして 良いコードを作ってくださいね。

    'シェルのオブジェクトを作成する
    Set objSHELL = CreateObject("Shell.Application")
    '起動した IE が 必ず 絶対 一番後ろ と決め付けて(プログラマーに絶対は無いだろクソ三流)
    Set objIE = objSHELL.Windows(objSHELL.Windows.Count - 1)
    '↑配列が0からなのでカウント-1 一番後ろのWindowをobjIEに代入
    Set objSHELL = Nothing   'この変数は 三流君みたいにもう用済みなので、バイバイ
    
    'ココから下は、いつもどおり、IEを使用する。
    
    '表示終了まで待つ .Busy(忙しい)間 と.ReadyState(ステータス)が4以外の時 ループ
    Do While objIE.Busy = True
         DoEvents  '特に何もしないで.Busyの状態が変わるまで待つ
    Loop
    Do While objIE.ReadyState <> 4
         DoEvents  '特に何もしないで.ReadyStateの状態が4に変わるまで待つ
    Loop
    
    'テーブルを探す
    'タグの取出しが、.tags("タグの名前")でできるので、
    Dim objTABLE As Object 'TABLEの格納用
    Set objTABLE = objIE.Document.all.tags("TABLE")  '.tags("TABLE")でTABLEタグを抜く
    '↑テーブルを取り出す。
    
    '1行目のデータを取り出す。
    ' objTABLE(n).rows(0).cells(x).innertext
    Dim n As Integer  'n番目の表
    Dim x As Integer  '列の管理
    Dim y As Integer  '行の管理
    Dim nTARGET As Integer  '見つけた表の番号
    Dim strMOJI As String
    
    nTARGET = -1   '初期値を見つからなかった-1とする
    For n = 0 To objTABLE.Length - 1  'テーブルの数ループする。
        Debug.Print "n = " & n
        Debug.Print "列数は .Rows(0).Cells.Length = " & objTABLE(n).Rows(0).Cells.Length
        For x = 0 To objTABLE(n).Rows(0).Cells.Length - 1  '列数分ループ
            Debug.Print objTABLE(n).Rows(0).Cells(x).innertext '中身をテスト表示
            'Cells(x) と C10の条件を比較して目的の表か判断。
            strMOJI = objTABLE(n).Rows(0).Cells(x).innertext '値を代入
            strMOJI = Replace(strMOJI, vbCr, "")  '改行コードを消す 0x0d 0x0a
            strMOJI = Replace(strMOJI, vbLf, "")
            If strMOJI = Trim(Range("c10").Text) Then
                nTARGET = n  '表の番号をセット保存。
                Exit For
            End If
        Next
        If nTARGET <> -1 Then Exit For  '見つけられたら抜けるよ。
    Next
    
    If nTARGET = -1 Then  '見つからなかったか?
        '※テーブルが見つからない時は、エラーメッセージを表示
        'メッセージ表示
        'IE を 閉じるか確認
        If MsgBox("テーブルが見つかりません" & vbCrLf & "IEを閉じますか?", _
                   vbYesNo) = vbNo Then
            Exit Sub  '何もせず関数を抜ける。IEを閉じない
        End If
    Else  '見つかった時
        '目的の表を見つけたらシートに書き出す。
        Sheets("TABLE").Select  'シートを切り替える
        Cells.Select
        Selection.Delete Shift:=xlUp
        Range("B2").Select
        
        'Webの表をシートへ転記(代入する)
        For y = 0 To objTABLE(nTARGET).Rows.Length - 1  '行のループ
            For x = 0 To objTABLE(nTARGET).Rows(y).Cells.Length - 1  '列数分ループ
                Cells(y + 1, x + 1) = objTABLE(nTARGET).Rows(y).Cells(x).innertext
            Next
        Next

    End If
    
    '終了処理
    objIE.Quit  'IEを閉じる
    Set objIE = Nothing   '変数の後始末
    
End Sub
↓実行結果(修正過程と結果)
03/18 VBA IE 表の取り込み IE起動方法を変更
http://www.youtube.com/watch?v=EScgt3F2mqU



終わりの挨拶

バグも出てるし、修正しないとなぁ・・・・
サンプルファイル:[IE_GET_TABLE_0316.zip]←今回作ったサンプルの IE_GET_TABLE_0316.xls です。

最新情報と作成履歴は→[更新履歴と最新を表示]


ページフッター リンクや広告、質問送信など

三流解説を読んでいただき、どうもです。ここから下は、三流君宛のメッセージ送信や 三流君のホームページの紹介・案内です
目的の情報が見つかったか?少々心配しつつ、、、※質問や感想は、気軽に送ってくださいね。

質問や要望など メッセージを送る(三流君に連絡する)

三流プログラマーのKen3 が 皆さんの質問にお答えします
と カッコつけて言っても、実力不足ですべての質問に回答することはできないのが現実なのですが、できる範囲で 三流的な逃げ手 や 解決方法 を探します(回答します)。

感想や質問・要望・苦情など 三流君へメッセージを送る。
時間的余裕のある要望・質問・苦情の場合は、下記のフォームからメッセージを送ることができます。
あなたのお名前(ニックネーム):さん
返信は?: 不用(HP更新を待つ) , E-mail→ アドレス:に返事をもらいたい



(感想や質問・要望 メッセージはHPで記事に載せることがあります。)

急ぎで連絡がほしい、そんな時は:[三流君連絡先]に連絡してください。

IE関係、VBA関係 の 三流君のホームページの紹介・案内

[IE操作 三流解説のトップページへ 戻る] / [IE操作の三流サンプル一覧へ 戻る]

[三流君 VBAでWebBrowser IEを操作する] / [三流君 VBAで楽しくプログラミング] / [AB型の変わり者 三流プログラマー Ken3 三流君Top]

F1でヘルプを見たり、デバック時にDebug.Print使ったり、イミディエイト ウインドウで簡単な確認したり。
なれると当たり前に操作している方法が↓かなぁ。
[F1ヘルプ マクロ記録ほか]・・・基本のF1を押してヘルプを見る方法など
[実行時エラー、デバッグモード]・・・デバッグの流れを簡単に(ハマった時はツライけど)
[イミディエイト ウインドウ と Debug.Print]・・・プログラム作成時に便利なイミディエイト ウインドウ
[VBA ウォッチ式とSTOPを使ってみた]・・・STOPで止め、ウォッチ式でオブジェクトの中身を確認する方法など
[参照設定のお話]・・・設定すると便利な(設定しないと使えない)、参照設定のお話

項目別に↓にプログラマーの本音?それとも建て前?的な記事をまとめました。お探しのジャンルを選択してください。
[プログラムは心? spirit]・・・プログラマー 心・気質・魂
[学ぶ study]・・・学習、技術の取得
[仕様書 doc]・・・仕様書・設計書関係の話

項目別に↓に人気の記事をまとめてみました。お探しのジャンルを選択してください。
[VBAでIE ウェブブラウザーを操作]・・・VBAでIE,WebBrowserを操作する サンプルです
[MSアクセス から エクセル を呼ぶ Excel.Application]・・・AccessからExcelを操作したりデータの書き出しなどです
[アウトルック メールの操作 Outlook.Application]・・・VBAからOutlookを使い、メール関係を処理するサンプルです
↑上記3つみたいなCreateObjectで他のアプリケーションを操作するサンプルが人気です。

Excel関係:
[エクセル ユーザーフォームを操作する]・・・エクセルでユーザーフォームを作成して入力などを行ってます
[エクセルからアクセスを操作する]・・・ExcelからAccessのマクロを起動してみました、
[エクセル関係 関数、その他]・・・その他Excel関係です

Access関係:
[アクセス ユーザーフォーム/サブフォーム 操作]・・・アクセスでフォームを使ったサンプルです
[アクセス レポート操作]・・・レポートを操作してみました
[アクセス クエリーやその他関数]・・・あまりまとまってませんが、スポット的な単体関数の解説です

その他:VBAの共通関数やテキストファイルの操作など
[テキストファイルの操作(Open,Close,Print,Input)]・・・普通のテキストファイルを使ったサンプルです

Blog:[三流君の作業日記]/ [objIEを使用したサンプルコードを見る]/ 広告-[通販人気商品の足跡]



[トップページへ 戻る] / [サンプル一覧へ 戻る]