VBA開発

VBAでIE操作「Javascriptのonclick要素を抜き出す」処理をパーツ化する

パーツ化とは

ExcelVBAマクロ初級者からの脱却が、処理のパーツ化(プロシージャの分割)と考えています。
マクロを作る上で基本機能をパーツ化する事で、開発時間の削減に繋がります。

分かりやすく説明すると、エクセルの「関数」と同様です。
SUM関数であれば セル内に「=SUM(1+2+3)」と記載すれば、セルには「6」と表示されますよね。
値を渡せば正しい値で返ってくる動きです。

このコードをコピペでOK

'■JavaScriptのonclick要素のみ抜き出す処理パーツ(サブプロシージャ)
Public Function Call_Instr_Get(str As String, instr1 As String, instr2 As String)
    Dim tpNoBefor As Long
    Dim tpNoAfter As Long
    
    tpNoBefor = InStr(str, instr1): If tpNoBefor = 0 Then Exit Function
    tpNoAfter = InStr(tpNoBefor, str, instr2): If tpNoAfter = 0 Then Exit Function
    Call_Instr_Get = Mid(str, tpNoBefor + Len(instr1), tpNoAfter - tpNoBefor - Len(instr1))

End Function

VBAでIE操作で厄介なのはJavaScript(JS)です。
onclick要素を抜き出すときに不変であれば、VBAのコード内に埋め込んでしまえばいいのですが、
onclick要素が可変の場合も多く存在します。(DB関連は特に可変です)
この処理を共通化(パーツ化)してしまいます。主に使用するのはInstr関数です。

上記をお好きなモジュール内にコピペしてください。
実際に使用する時は以下のような形で使用してください。

Sub test()
        Dim temp As String

        '■onclick要素を抜き出す(例ではonclick="から"の間の文言を取得)
        temp = objIE.document.getElementsByClassName("1stDB")(0).outerHTML
        temp = Call_Instr_Get(temp, "onclick=""", """")
 
End Sub

結果イメージ

上記で、JavaScriptのonclick要素を抜き出します。
onclick要素が抜き出せれば次の画面に遷移は簡単です。

その他

・onclickの動作については下記記事を参照してください。
VBAでIE操作「VBAでJS(JavaScript)のonclickをクリックする」【エクセルマクロ】

その他

Internet Explorerを使用して、Webスクレイピングは敷居が高い風に捉えられますが、
上記のように、パーツ化して組み合わせ処理するだけです。

Web上のデータを触りたい要望は会社様でも個人様でも多いと思います。
VBA IE操作を覚えて効率化しませんか?
作成が大変であれば弊社で代行開発も可能です。お気軽にお問い合わせください。

 

コメント

タイトルとURLをコピーしました