質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.80%

VBAでのIE制御におけるボタン操作

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 642

washio

score 1

Excel VBAを活用して、IE制御をするプログラムを作成している中で操作できないボタンがあり、
操作方法をご教示いただけませんでしょうか。

以下のコードに沿って試していくと、住所入力まではうまくいくものの、住所入力後の
遷移サイト上の「選択中の情報」欄にある「洪水」ボタンを押すことがどうしてもできません。
同様に「土砂災害」ボタンおよび「検索結果」欄の「×ボタン」も押下したいのですが、同様に
制御できず、住所入力後の検索ボタン押下時との制御の違いが理解できずにおります。

Sub hazardmap()

    Dim ie As InternetExplorer
    Dim txt As HTMLTextAreaElement
    Dim inputTags As IHTMLElementCollection
    Dim inputTag As IHTMLElement
    Dim inputTags2 As IHTMLElementCollection
    Dim inputTag2 As IHTMLElement

'IEでHPを開く。
'---------------------------------------------------------------------------------------------------------
    Set ie = CreateObject("InternetExplorer.Application")
        ie.Visible = True
        ie.Navigate "https://disaportal.gsi.go.jp/"
    Do While ie.Busy Or ie.ReadyState < READYSTATE_COMPLETE
        DoEvents
    Loop
'---------------------------------------------------------------------------------------------------------

'ハザードマップにセルの住所を入力して検索
'---------------------------------------------------------------------------------------------------------
    Set txt = ie.document.getElementById("query")
        txt.Value = "東京都"
    Set inputTags = ie.document.getElementsByTagName("IMG")
        For Each inputTag In inputTags
            If InStr(inputTag.src, "https://disaportal.gsi.go.jp/hazardmap/image/skin/search.png") > 0 Then
                inputTag.Click
                Exit For
            End If
        Next

    Do While ie.Busy Or ie.ReadyState < READYSTATE_COMPLETE
        DoEvents
    Loop

'「洪水」ボタンをクリック
'---------------------------------------------------------------------------------------------------------
    Set inputTags2 = ie.document.getElementsByTagName("img")
        For Each inputTag2 In inputTags2
            If InStr(inputTag2.src, "image/skin/kouzui.png") > 0 Then
            inputTag2.Click
            Exit For
        End If
    Next

End Sub
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

+2

2点問題があると思います。下記へ変更してやってみて下さい。
1.("img")訂正--->("IMG")
2.msgbox "ok"を追加して一旦画面を止める。
(IE側Load完了前にクリックが動いていると思われる。)
不明な場合は下記の様に、イミディエイト画面へ値を出してデバックして見て下さい。
Debug.Print inputTags2.uniqueNumber & " - " & inputTags2.src
'========================================================
'----------------------------
'「洪水」ボタンをクリック
'----------------------------
MsgBox "ok"
set inputTags2 = ie.document.getElementsByTagName("IMG")
'========================================================
<下記は参考です>
画面ボタンが選択されて動く状態が見えると思います。

'(Test_Sample_Miniature)
'----------------------------------
'「洪水」ボタンをクリック部分を変更
'----------------------------------
Dim inputTag_Kozui As IHTMLElement
Dim inputTag_Dosha As IHTMLElement
Dim inputTag_Tsunami As IHTMLElement
Dim inputTag_Douro As IHTMLElement

Set inputTags = ie.document.getElementsByTagName("IMG")
For Each inputTag In inputTags
    '
    '(デバック用記述)
    Debug.Print inputTag.uniqueNumber & " - " & inputTag.src
    '
    Select Case True
        Case InStr(inputTag.src, "image/skin/kouzui.png") > 0
            Set inputTag_Kozui = inputTag
        Case InStr(inputTag.src, "image/skin/dosha.png") > 0
            Set inputTag_Dosha = inputTag
        Case InStr(inputTag.src, "image/skin/tsunami.png") > 0
            Set inputTag_Tsunami = inputTag
        Case InStr(inputTag.src, "image/skin/douro.png") > 0
            Set inputTag_Douro = inputTag
    End Select
Next

'画面選択
'----------------------------------
Dim strNo As String
Do
strNo = InputBox("No:1~4", "処理選択", 1)
Select Case strNo
    Case "1"
        inputTag_Kozui.Click
    Case "2"
        inputTag_Dosha.Click
    Case "3"
        inputTag_Tsunami.Click
    Case "4"
        inputTag_Douro.Click
    Case Else
        Exit Do
End Select
Loop

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/05/13 22:05

    ご回答ありがとうございました。
    ご指摘通り「IE側Load完了前にクリックが動いている」ことが原因だったと思われアドバイスいただいた内容にてうまく動作しいました。
    誠にありがとうございました!

    キャンセル

0

ダメもとですが、alt属性を利用してクリックする方法を試してみてください。
(修正後)If InStr(inputTag2.alt, "image/skin/kouzui.png") > 0 Then
(修正前)If InStr(inputTag2.src, "image/skin/kouzui.png") > 0 Then

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/05/10 18:27

    ご丁寧に回答いただきまして誠にありがとうございます。
    結論から言うとご指摘箇所修正しても変わらずでした。
    (InStr(・・・)が0となり、キャッチできていないようです。)

    該当HPをF12開発者ツールで確認すると元々今回制御したいボタンが「index.html」のソース内になく、「hazardmaps.js」内に記載されており、そのため通常の「index.html」のソース内と制御方法に違いがあるのかな、等改めて考えましたがもう少しリサーチさせていただこうかと思います。
    うまく制御できた住所入力と検索ボタン押下はいずれも「index.html」内の項目を使用しておりますので。。

    キャンセル

  • 2020/05/10 18:32

    そうですか。私の対応範疇を超えています。

    VBAでJavaScriptを発動させる必要がありそうなので、以下サイトを参考にしてみてください。
    https://mmm-program.com/vba-ie-js-listbox/

    キャンセル

  • 2020/05/10 20:28

    ありがとうございます。
    参考HPの内容も参照させていただきます。

    キャンセル

0

取得しているタグはIMGであり、inputタグではないため、クリックしても反応がないのでは?

Set inputTags = ie.document.getElementsByTagName("IMG")
            If InStr(inputTag.src, "https://disaportal.gsi.go.jp/hazardmap/image/skin/search.png") > 0 Then

IMGの親ノード(parentElement)を取得してクリックすることで動作しませんか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/05/10 21:32

    ご回答いただきましてありがとうございます。
    ご指摘いただきましたコード部分2か所修正してもやはり動作しませんでした。。

    ただし、parentElementの参照方法が若干怪しく、もとのコードからparentElementの参照
    のための修正内容ご教示いただけますと大変幸いです。

    理解悪く申し訳ございません。

    キャンセル

  • 2020/05/10 22:23

    https://teratail.com/questions/79006
    にparentElementの使用例があります。
    これを参考にしてみるとよいと思います。
    (VBAだとすぐに実機確認できないため、ご容赦願います。)

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.80%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る