■4-2 HTMLタグのフォームエレメントを制御するテクニック
実際のインターネットのWebページをExcelVBAで制御する場合、Webページのソースを見てそのHTMLタグ
のフォームに記載のコントロールボックスを指定できるようにならないと話が始まりません。
ここではサンプルを見て各種コントロールの制御方法を覚えてください。




(1)Webページのテキストボックスへ文字を入力する方法
テキストボックスはWeb訪問者が、データや文字の入力に使用します。
各種テキストボックスの指定方法もここで紹介します(実行例は画面4参照)。

画面4テキストボックスへ記入例


以下はHTMLファイルのソースの1部です。
form1プロシージャと合わせて見てください。
・最初のフォームはforms(0)で2個目は(1)になります。フォームは通常名前 が付いていますが無い
ケースもあります(本例ではフォーム(1)は名前無し)・本例はtext(4)の所は、テキストボックス名を省略
してあります。

form0.htmlファイルのタグ例
<FORM NAME="Myfm">
text(1)<IINPUT TYPE="text" NAME="txt1" SIZE=30 MAXLENGTH=20><br><br>
text(2)<IINPUT TYPE="text" NAME="txt2" SIZE=30 MAXLENGTH=20><br><br>
text(3)<IINPUT TYPE="text" NAME="txt3" SIZE=30 MAXLENGTH=20><br><br>
</FORM>
<FORM >
text(3)<INPUT TYPE="text" NAME="txt4" SIZE=30 MAXLENGTH=20>&<br><br>
text(4)<IINPUT TYPE="text" SIZE=30 MAXLENGTH=20><br><br>
</FORM>
Private Declare Function SetForegroundWindow Lib "user32" _
(ByVal hWnd As Long) As Long
Private Declare Function IsIconic Lib "user32" _
(ByVal hWnd As Long) As Long
Private Declare Function ShowWindowAsync Lib "user32" _
(ByVal hWnd As Long, ByVal nCmdShow As Long) As Long
 
Dim myobj As Object, objIE As Object
Dim fff As String, mycnt As Variant
Dim sanp As Integer
--------------------------------------------------------
Sub form1()
    fff = ThisWorkbook.Path & "\form01.html"
    sanp = 1
    Call form
End Sub
PSub form()
Set myobj = CreateObject("Shell.Application")
mycnt = myobj.Windows.Count
 
fff = "http://www2s.biglobe.ne.jp/~iryo/"
With myobj.Windows
    Shell ("EXPLORER.EXE " & fff)
        Do
            DoEvents
        Loop Until mycnt + 1 <= .Count
    Set objIE = .Item(mycnt)
End With
 
   Do While objIE.ReadyState <> 4 Or objIE.Busy = True
        DoEvents
   Loop
    Select Case sanp
        Case 1
            Call form1a
        Case 2
            Call form2a
    End Select
 
    If IsIconic(objIE.hWnd) Then
       ShowWindowAsync objIE.hWnd, &H9
    End If
    SetForegroundWindow (objIE.hWnd)
 
Set objIE = Nothing
Set myobj = Nothing
End Sub
-------------------------------------------------------
Sub form1a()
With objIE.Document
    .all("txt1").Value = "text(1)へ記入 12345"
    .all.txt2.Value = "text(2)へ記入 abcde"
    .Myfm.txt3.Value = "text(3)へ記入 ABCDE"
 
    .getElementById("txt4").Value = "text(4)へ記入 あいうえお"
    .forms(1).elements(1).Value = "text(5)へ記入 67890"
End With
End Sub




(2)Webページのコントロールボタンクをリックする方法
「 form2」マクロをPC上で実行した場合、「セキュリティ保護のため・・ActiveXコントロールを実行しない
よう、Internet Explorerで制限されています。・・・」の表示が出て実行がストップします。本例のボタンが
クリックされた確認は、実際のサーバーにHTMLファイルを送りそのURLを指定してデバッグをしました。
(実行例は画面5参照)。なお、自分のPC上で本例を実行する方法もありますが、その方法は4-7節

4-4(9)[1]「●デモファイルが自分のPC上で動くようにIEを設定」参照ねがいます。

画面5コントロールボタンクリック実行例


Sub form2a()
With objIE.Document
    .all.bu1.Click
    .forms(1).elements(0).Click
End With
End Sub




(3)Webページのラジオボタンへチェックを入れる方法
本マクロ例は「ラジオボタンのtest3」チェックを自動的に実行します。実行例は画面6参照

画面6ラジオボタンのチェック例


Sub form3a()
    objIE.Document.forms(0).razio(2).Click
Rem objIE.Document.forms(0).elements(2).Click
 
End Sub

・ラジオボタンは同じ名前にすればグループ内ではONになる項目は常に1個です。
 名前は同じであり指定は番号で行います(スタートは0から)




(4)Webページのチェックボックスへチェックを入れる方法
本マクロ例は「チェックボックスのtest4」へ自動的にマークを入れます。(実行例は画面7参照)

画面7チェックボックスのチェック例


Sub form4a()
    objIE.Document.Myfm.chk4.Checked = True
Rem objIE.Document.Myfm.elements(3).Checked = True
 
End Sub




(5)Webページのドロップダウンリストの項目を選択する方法
本マクロ例は「ドロップダウンリストの上から3番目(0から数えると2)」の選択を自動的に実行します(画面8参照)


画面8ドロップダウンリストの指定例


Sub form5a()
    objIE.Document.Myfm1.Myop.selectedIndex = 2
 
End Sub




(6)Webページが分割フレームを使用の場合の書込み方法


Document.frames("フレーム名")で指定し、以下はDocument・・・・でフレーム1個と同じ記述です(画面9参照)。

画面9分割フレームへの書込み例





マクロは、4-2(◆Webページのテキストボックスへ文字を入力する方法)と同じであり、異なっている内容のみ
以下に記述します。
Sub form6a()
 
With objIE.Document.frames("fm2").Document
    .all("txt1").Value = "フレーム2へ書き込みテスト(1)"
    .all("txt2").Value = "フレーム2へ書き込みテスト(2)"
    .Myfm.txt3.Value = "フレーム2へ書き込みテスト(3)"
    .all("txt4").Value = "フレーム2へ書き込みテスト(4)"
    .forms(1).elements(1).Value = "フレーム2へ書き込(5)"
End With
 
End Sub


【参考421】エレメント番号はFORMごとに0からになります
上記の「form6a」マクロですが、「forms(1).elements(1)」について少し判りずらいと思われるので説明します。
この書込み対象の「form0.html」ファイルはフォームがforms(0)forms(1)の2個あります。
forms(1)は2個目のフォームの指定で、2番目のエレメントelements(1)を指定しています。
以下のエレメント番号詳細を参照してください。なお、他の指定は名前でおこなっています。

forms(0).elements(0) ⇒ 
forms(0).elements(1) ⇒ 
forms(0).elements(2) ⇒ 
 
forms(1).elements(0) ⇒ 
forms(1).elements(1) ⇒ 



【戻る】    【Top画面】   【HPへ】