Webページに「番号のリスト」があり、その番号に対する内容を「表示する」といったケース(例えば、伝票番号に対する現在のステータスなどの詳細情報を表示する)で、登場するのが「ラジオボタン」ですね。番号の隣に「二重丸◎の形状で選択すると真ん中が黒くなる」ボタンです。それを選択(クリック)して、そのページのどこかにある「表示」ボタンをクリックして、詳細情報を表示するような感じになります。
このラジオボタンをVBAで操作する方法を説明します。
ラジオボタンは、INPUTタグで作られますので、まず、このINPUTタグに付けられたnameが何かを探します。 見つけたら、そのオブジェクトに対して、ObjXX.Checked = Trueとすれば、二重丸の黒丸が入り、「選択」(チェック)された状態になります。
この例では、テーブルのエントリは6個のTDタグで構成され、 最初のエントリにラジオボタンのINPUTタグもあり、 "radio-button-name" という名前を持つとします。テーブルは、複数のエントリで構成されます。(例えば、伝票番号の数だけのエントリがあります。)
mは、テーブルのエントリ(6個のTDタグを持つ)をカウントするために使用します。
mmは、TDタグの最大個数をカウントするために使用します。
nは、TDタグをくるくると回すために使用します。
GetElementsByTagNameでタグを取ると、すべてのTDタグが取れるので、くるくる回しながら、必要なタグをたぐる必要があるのです。
nnは、ラジオボタンを持つTDタグをカウント(探す)するのに使用します。
まず、GetElementsByTagNameで現在のページのTDタグの最大数をmmにセットします。
mm = 0 For Each objTD In objIE.document.Frames("bodys").document.GetElementsByTagName("TD") mm = mm + 1 Next次に、再び、GetElementsByTagNameでTDタグをたぐりながら、テーブルのエントリごとに伝票番号のラジオボタンを選択し、その伝票番号の内容を表示するために「表示」ボタンをクリックし、表示のページに飛んで、情報を抜いて参ります。
m = 1 Do n = 0 ' *** turn a radio button on *** For Each objTD In objIE.document.Frames("bodys").document.GetElementsByTagName("TD") n = n + 1 nn = 0 For Each objITEM in objTD.document.getbyTagName'("INPUT") If objITEM.Name = "radio-button-name" Then nn = nn + 1 If nn = m then objITEM.Checked = True ' radio button on Exit For End If End If Next If n < ( m * 6 ) Then GoTo Continue ’ skip If ( m * 6 ) > mm then GoTo FINISH ' the last TD? If n Mod 6 = 0 Then Exit For ' 6 * n Continue: Next m = m + 1 Nextここにラジオボタンに黒丸をした後にやりたいこと。例えば、表示ボタンを押し、 表示されたページを捕まえて、テープルから情報を抜いてくる処理を記述します。 例えば、6番目のタグに伝票番号が入っていたとして、それを取り込んで、 EXCELシートの名前にします。 ActiveWorkBook.Sheets.Add.Name = objTD.innertext ここの処理で、伝票番号をキーに伝票番号の詳細情報のページを表示したとき、元の画面が残らずに、詳細ページへジャンプするようなシステムであれば、伝票番号の詳細情報を抜いた後に、最初の伝票番号のリストのページへ復帰する必要があります。 最初の伝票番号のリストのページ名が”伝票システムの番号リスト”であれば、 そのページへ戻るコードは、以下。
For Each objWindow In objShell.Windows If TypeName(objWindow.document) = "HTMLDocument" Then Set objIE = objWindow If objIE.document.title = "伝票システムの番号リスト” then Exit For End If Next なお、objShellは、IEの初期化で URL01 = "http://www.伝票システムのURL" URL02 = "http://www.伝票システムのURL/login.jsp" Set objIE = CreateObject("InternetExplorer.Application) objIE.Visible = True objIE.Navigate URL01 Application.Wait (Now + TimeValue(0:00:03")) Set objIE = Nothing Set objShell = CreateObject("Shell.Application") Set objIE = ObjShell.windows.Item(objShell.windows.Count -1 ) objIE,Navigate URL02 Application.Wait (Now + TimeValue(0:00:03")) Do While objIE,Readystate <> 1 Do While objIE,busy = True Loop Loopという感じで設定されております。 実は、今回のノウハウのキーとなるIEでのラジオボタン操作は、ネットで探して、コピペして、作りました。TDタグを全部取って、クルクルしなくてもできると思うのですが、できればいいんですよね。特に、TDタグの最大数を取ってくるところは、もっとスマートな方法があるとは思いますが、できればいいンですねー。 クルクルしながら、ラジオボランを順に回すところは、ブレークポイントを駆使して、ちゃんと動いているか確認。とても泥臭いプログラミング、デバッグ手法でした。 ここでちょっと一息のコーナーです。 いのうえ ひさしの言葉から(これを目指してます。出来ていないけど)。 難しいことをやさしく やさしいことを深く 深いことを愉快に 愉快なことをまじめに書くこと。
0 件のコメント:
コメントを投稿