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 "フォームがありません。"
といった感じで処理をしておきます。
まぁ、全ての人に便利な関数かどうかは分からないけど、自分は便利でした。
Excel VBAでIEを思いのままに操作できるプログラミング術 Excel 2013/2010/2007/2003対応
- 作者: 近田伸矢,植木悠二,上田寛
- 出版社/メーカー: インプレス
- 発売日: 2013/04/19
- メディア: Kindle版
- この商品を含むブログ (8件) を見る