その買うを、もっとハッピーに。|ハピタス

input要素からフォームを取得 - VBA、IE制御

昨日に引き続いて…
今日はinput要素のname属性及びvalue属性を元にフォームを取得する関数です。
フォームが3つくらいあるけど名前が付いてなくて直接指定が難しい場合に便利です。
それぞれが似たようなフォームでも、hiddenで隠れてるinput要素にユニークな値があったりするので、それを利用してそのinput要素の親に当たるフォームを取得します。

'---------------------------------------------------------------
'関数名:getFormByInputName
'内容:ユニークなインプット名から特定のフォームを取得
'引数1:IEオブジェクト
'引数2:ユニークなインプット名
'戻り値:フォームオブジェクト
'---------------------------------------------------------------
Function getFormByInputName(ByVal objIE As Object, ByVal input_name As String) As Object
    Dim objInput As Object
    For Each objInput In objIE.document.all.tags("INPUT")
        If objInput.name = input_name Then
            Set getFormByInputName = objInput.form
            Exit Function
        End If
    Next objInput
End Function

'---------------------------------------------------------------
'関数名:getFormByInputValue
'内容:ユニークなインプットの値から特定のフォームを取得
'引数1:IEオブジェクト
'引数2:ユニークなインプットの値
'戻り値:フォームオブジェクト
'---------------------------------------------------------------
Function getFormByInputValue(ByVal objIE As Object, ByVal input_val As String) As Object
    Dim objInput As Object
    For Each objInput In objIE.document.all.tags("INPUT")
        If objInput.Value = input_val Then
            Set getFormByInputValue = objInput.form
            Exit Function
        End If
    Next objInput
End Function


初めの引数にはIEオブジェクト、2つ目にはname属性及びvalue属性の値を指定します。
For Eachでinputタグがある分ループして、指定した値があったらフォームを返してます。
従ってユニークではなく複数あるような値だと最初にあったものを返すことになります。
尚、なかった場合はフォームオブジェクトは返りませんので、本文の方で

Set objForm = getFormByInputName(objIE, "test")
If objForm Is Nothing Then MsgBox "フォームがありません。"


といった感じで処理をしておきます。
まぁ、全ての人に便利な関数かどうかは分からないけど、自分は便利でした。