ExcelからVBAで「クロネコ荷物問い合わせ」一括検索(IE6版)#3
- (2009-03-27 14:17:31)
-------------------------------
先のサイトには下記の内容が書かれている。
・「エクセルのセルにあるデータをWEBページのテキストボックスに代入して、順次、関連ページを開くというVBA」
・「エクセルのA列に入力された番号を10ヶずつWEBページにコピーして、クロネコヤマトの荷物お問い合わせシステムのメール追跡機能を利用する」
それはそのままやりたいことだったので喜んで試してみるとエラーで止まった。よくよく読むとIE7用だった。IE7はタブブラウザーになっており、10件問い合わせると次々に新しいタブを開いていくという内容になっていた。IE7は一度ひどい目に合い、IE6にもどした経緯がある。IE8が安定するまではIE6で行きたい。ならばこのお手本コードをIE6用改造することにした。
基本ロジックは「伝票番号を10件読み込むごとにページをめくる」という比較的わかりやすい、とってもコンピュータの好きそうなロジックなのでループを2段階で回せば、それらしくなりそう。IEの起動はCreateObjectで問題ないだろう。伝票番号を打ち込むべきフォーム番号や位置の特定はお手本を参考にする。
お手本と若干違う内容はExcelのセルA1から伝票番号を読むコードになっていたが、私のコードは選択(アクティブ)された「任意のセル」からできるようにした。
基本ロジック:
・ExcelからIE6を起動し「ヤマトお問合せシステム」へ飛ぶ
・Excelの特定セルから10件、伝票番号を順次読み込んで「ヤマトお問合せシステム」のフォームに入れる。
・伝票番号が10件以下の場合はそのまま検索。
・伝票番号が10件を超える場合は最初の10件を検索し、その後新しいページを開いて10件ごとに同じ操作を繰り返す。
・(今後の予定)Webに表示された「配達完了」「作業店通過」などの検索結果をExcelに戻す(伝票番号の横に書き込む)。
検索結果には下記の結果が表示されるので理想を言えば、これの結果をExcelに書き戻したい。これは力及ばなかった。次回試したい。
「発送」
「作業店通過」
「配達完了」
「投函予定」
「投函完了」
「調査中」
「配達日・時間帯指定(保管中)」
「伝票番号未登録」
'「ヤマトお問合せシステム」の自動検索プログラム(EXCEL VB)
'IE6用。
'Shell.Applicationオブジェクトをセット。
Dim Shell As Object
Set Shell = CreateObject("Shell.Application")
'IEを起動し「クロネコヤマトの荷物お問い合わせシステム」へ。
Dim IE As Object
Set IE = CreateObject("InternetExplorer.Application")
IE.Navigate2 "http://toi.kuronekoyamato.co.jp/cgi-bin/tneko?init"
IE.Visible = True
'Excelシート内の選択された任意のセルから開始するためにセルの行番号・列番号を採取。
Dim i As Integer, j As Integer, FormNo As Integer, PageNo As Integer
i = ActiveCell.Row
j = ActiveCell.Column
PageNo = 0
'-------------------------------
'2段階ループ。ページをめくる大ループ
'-------------------------------
Do
'IEの起動を待つ。
Do While IE.Busy Or IE.ReadyState <> 4
DoEvents
Loop
'WEB画面変化のタイミング調整。
Application.Wait (Now + TimeValue("0:00:2"))
'-------------------------------
'問い合わせフォームに順々にExcel伝票番号を入れる小ループ。
'-------------------------------
'Excelの空欄セルに来たらループ解除。
For FormNo = 1 To 10
If Cells(PageNo * 10 + FormNo - 1 + i, j) = "" Then
Exit Do
End If
Shell.Windows.Item().Document.forms(0)(FormNo + 4).Value _
= Cells(PageNo * 10 + FormNo - 1 + i, j)
Next
'伝票番号を目視確認できるよう数秒待って問い合わせボタンをクリック。
Application.Wait (Now + TimeValue("0:00:2"))
Shell.Windows.Item().Document.forms(0)(3).Click
Do While IE.Busy Or IE.ReadyState <> 4
DoEvents
Loop
'ロジック的に必要ないがもう一度クリックした方がきれい。
Application.Wait (Now + TimeValue("0:00:2"))
Shell.Windows.Item().Document.forms(0)(3).Click
PageNo = PageNo + 1
Loop
'-------------------------------
Shell.Windows.Item().Document.forms(0)(3).Click
Set IE = Nothing
Set Shell = Nothing
ThisWorkbook.Saved = True
ExcelからVBAで「クロネコ荷物問い合わせ」一括検索(IE6版)#4
ExcelからVBAで「クロネコ荷物問い合わせ」一括検索(IE6版)#3
ExcelからVBAで「クロネコ荷物問い合わせ」一括検索(IE6版)#2
ExcelからVBAで「クロネコ荷物問い合わせ」一括検索(IE6版)#1