もくじ
モジュール共通部分
Option Explicit '************************************************************** 'Day5.総合演習 ' (1)連続的な画面遷移を行う ' (2)オンライン画面のデータをワークシートに一覧化する ' (3)ワークシート一覧データをオンライン画面に登録する '************************************************************** Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
(1)連続画面遷移
'サンプル5.1.1_連続画面遷移 Public Sub navigate1To3() Dim ie As InternetExplorer Dim Anchor As HTMLAnchorElement 'IE起動 Set ie = CreateObject("InternetExplorer.Application") ie.Visible = True '画面1を開いて待ち受け ie.Navigate2 "http://macrogirls.net/sample/screen1.html" Do While ie.Busy Or ie.ReadyState < READYSTATE_COMPLETE DoEvents Loop Sleep 2000 '動作を見るために2秒待ち(動作上は不要) 'リンクをクリックして画面2へ移動&待ちうけ For Each Anchor In ie.document.getElementsByTagName("A") If Anchor.innerText = "画面2へ進む" Then Anchor.Click Exit For End If Next Do While ie.Busy Or ie.ReadyState < READYSTATE_COMPLETE DoEvents Loop Sleep 2000 '動作を見るために2秒待ち(動作上は不要) 'ボタンをクリックして画面3へ移動&待ちうけ ie.document.forms("TargetForm").elements("toScreen3").Click Do While ie.Busy Or ie.ReadyState < READYSTATE_COMPLETE DoEvents Loop End Sub
(2)連続画面遷移(開いた子画面の待ちうけ)
'サンプル5.1.2_連続画面遷移(開いた子画面の待ちうけ) Public Sub waitChild() Dim ie As InternetExplorer Dim ieChild As InternetExplorer 'IE起動→サンプル親画面に遷移 Set ie = CreateObject("InternetExplorer.Application") ie.Visible = True ie.Navigate2 "http://macrogirls.net/sample/parent.html" '待ちうけ Do While ie.Busy Or ie.ReadyState < READYSTATE_COMPLETE DoEvents Loop '子画面を開くボタンをクリック ie.document.forms("TargetForm").elements("OpenChild").Click '子画面を探す Do While ieChild Is Nothing Set ieChild = Day2.getIE("子画面の例") DoEvents Loop '子画面の待ちうけ(ただしgetIEでDocumentを参照しており、基本的には不要) Do While ieChild.Busy Or ieChild.ReadyState < READYSTATE_COMPLETE DoEvents Loop Debug.Print ieChild.document.body.innerHTML End Sub
(3)オンライン画面のデータをワークシートに一覧化する
'サンプル5.2.1_オンライン画面のデータをワークシートに一覧化する Public Sub お客さまデータ一覧化() Dim ie As InternetExplorer Dim AllAnchors As Object Dim i, NextIndex, printrow As Integer 'IE起動→オンライン画面へ遷移→一覧画面へ遷移 Set ie = getOnline ie.document.frames("Footer").document.forms("Commands").elements("ShowList").Click waitNavigation ie '画面に対して処理(次の画面がある限り処理) printrow = 3 Do NextIndex = -1 '次の画面へのAタグインデックス値をリセット 'すべてのAタグに対して処理(インデックスを利用) For i = 0 To ie.document.frames("Main").document.getElementsByTagName("A").Length - 1 'Aタグコレクションへの参照を格納(再格納) Set AllAnchors = ie.document.frames("Main").document.getElementsByTagName("A") 'Cを含むリンクの場合クリックしてお客さま情報へ遷移 If InStr(AllAnchors(i).href, "C") > 0 Then AllAnchors(i).Click waitNavigation ie 'お客さま情報のシート転記 printCustomerData ie, printrow printrow = printrow + 1 '次の画面へのリンクの場合はインデックスを保管しておく ElseIf InStr(AllAnchors(i).innerText, "次へ") > 0 Then NextIndex = i End If Next '次のページに遷移 If NextIndex >= 0 Then ie.document.frames("Main").document.getElementsByTagName("A")(NextIndex).Click waitNavigation ie End If DoEvents '次の画面へ遷移している場合はループ Loop While NextIndex >= 0 End Sub
'サンプル5.2.2_詳細画面転記処理 Private Sub printCustomerData(ie As InternetExplorer, printrow As Integer) Dim Anchor As HTMLAnchorElement Dim TDs As Object Dim i As Integer Dim CID, CName, CAddress, CMagic, CFamiliar, SalesDept As String 'すべてのTDタグを評価し、取得対象項目のデータを変数に格納 Set TDs = ie.document.frames("Main").document.getElementsByTagName("TD") For i = 0 To TDs.Length - 1 Select Case Trim(TDs(i).innerText) Case "お客さまID": CID = TDs(i + 1).innerText Case "氏名": CName = TDs(i + 1).innerText Case "住所": CAddress = TDs(i + 1).innerText Case "魔法": CMagic = TDs(i + 1).innerText Case "使い魔": CFamiliar = TDs(i + 1).innerText Case "営業担当": SalesDept = TDs(i + 1).innerText End Select Next '取得データをワークシートに転記 Sheet2.Cells(printrow, 1).Value = CID Sheet2.Cells(printrow, 2).Value = CName Sheet2.Cells(printrow, 3).Value = CAddress Sheet2.Cells(printrow, 4).Value = CMagic Sheet2.Cells(printrow, 5).Value = CFamiliar Sheet2.Cells(printrow, 6).Value = SalesDept '一覧画面に戻る For Each Anchor In ie.document.frames("Main").document.getElementsByTagName("A") If InStr(Anchor.innerText, "戻る") > 0 Then Anchor.Click waitNavigation ie Exit Sub End If Next End Sub
(4)ワークシート一覧データをオンライン画面に登録する
'5.3_ワークシート一覧データをオンライン画面に登録する Public Sub 一覧データオンライン登録() Dim ie As InternetExplorer Dim i As Integer 'IE起動→オンライン画面へ遷移 Set ie = getOnline '各レコードを登録 i = 3 Do While Sheet2.Cells(i, 1) <> "" '新規登録画面へ遷移 ie.document.frames("Footer").document.forms("Commands").elements("Register").Click waitNavigation ie 'レコードデータをフォームに貼り付け・送信 With ie.document.frames("Main").document.forms("RegData") .elements("CustomerID").Value = Sheet2.Cells(i, 1) .elements("CustomerName").Value = Sheet2.Cells(i, 2) .elements("Address").Value = Sheet2.Cells(i, 3) .elements("Magic").Value = Sheet2.Cells(i, 4) .elements("Familiar").Value = Sheet2.Cells(i, 5) .elements("SalesDepartment").Value = Sheet2.Cells(i, 6) .submit End With waitNavigation ie i = i + 1 DoEvents Loop End Sub
総合演習で利用する汎用処理
'サンプルオンラインシステム起動処理 Private Function getOnline() As InternetExplorer Dim ie As InternetExplorer 'IE起動→オンライン画面へ遷移 Set ie = CreateObject("InternetExplorer.Application") ie.Visible = True ie.Navigate2 "http://macrogirls.net/sample/webonline.html" waitNavigation ie Set getOnline = ie End Function
'サンプルオンラインシステム汎用待ちうけ処理 Private Sub waitNavigation(ie As InternetExplorer) Dim i As Integer 'IE待ちうけ Do While ie.Busy Or ie.ReadyState < READYSTATE_COMPLETE DoEvents Loop 'フレームセットのドキュメント待ちうけ Do While ie.document.ReadyState <> "complete" DoEvents Loop 'フレーム内のドキュメント待ちうけ For i = 0 To ie.document.frames.Length - 1 Do While ie.document.frames(i).document.ReadyState <> "complete" DoEvents Loop Next End Sub




