アプリ版:「スタンプのみでお礼する」機能のリリースについて

vbaでieを操作しようとしています。下記の「複数検索」ボタンをクリックしようと思っているのですが「実行時エラー 型が一致しません。」となり、クリックできません。どのように修正すれば良いのでしょうか?

お手数をおかけしますが、ご教授よろしくお願いします



・ソース

<div class="CSearch">

<a href="javascript:void(0);" data-bind="click: function(){$root.showSearch();}"

class="search1"><span>単一検索</span></a>

<span class="search2">複数検索</span>

</div>



・コード

Dim button As IHTMLInputElement

For Each button In htmlDoc.getElementsByTagName("div")

If InStr(button.className, "search2") > 0 Then

button.Click

Exit For

End If

Next

質問者からの補足コメント

  • fujillin 様
    迅速な回答ありがとうございます。
    1)htmlDocは取得できているのでしょうか?
    →前半部分を省略していたので追記致します。
    下記のように記載しているので出来てると思っておりますがいかがでしょうか?
    『Dim htmlDoc As HTMLDocument』
    意味を履き違えていましたら申し訳ございません。
    2)「IHTMLInputElement」は本に載っていたので使用しておりましたが、変えてみました。
    3)etElementsByTagName("div")~span要素のようなので
    →下記で「getElementsByTagName("span")」と変えてみました。



    以上でエラーはなくなりましたが、クリックは出来ておりませんでした。(続きます)

    No.1の回答に寄せられた補足コメントです。 補足日時:2019/05/23 13:48
  • Dim objIE As InternetExplorer
    Set objIE = New InternetExplorer
    objIE.Visible = True

    objIE.Navigate "https://maru.maru"
    Do While objIE.Busy = True Or objIE.readyState <> 4
    DoEvents
    Loop
    Dim htmlDoc As HTMLDocument

    Set htmlDoc = objIE.document

    Dim button As IHTMLInputElement

      補足日時:2019/05/23 13:54
  • For Each button In htmlDoc.getElementsByTagName("span")
    If InStr(button.className, "search2") > 0 Then
    button.Click
    Exit For
    End If
    Next

    文字数制限のため分割し見にくくなり申し訳ございません。

      補足日時:2019/05/23 13:56

A 回答 (2件)

No1です



>以上でエラーはなくなりましたが、クリックは出来ておりませんでした
どこまで意図通りに動作しているかをチェックしながら、原因を特定してゆくしかないでしょう。

例えば、目的のspan要素が取得できているのかは、
 Debug.Print button.textContent
などとしてみて、「複数検索」が表示されるかで確認できる、といった塩梅です。
このようにして、どこが実際におかしいのかを特定して対応するのが、一見、遠回りに見えて近道かと思います。

span要素に対して、clickメソッドが存在するのかどうかも確かめておいたほうがよさそうです。
(大抵の場合はフォーム内の要素が対象なので、spanをclickしたことがありませんので)

一方で、ページのソースを見てみると、直接スクリプトが実行されるような記述にはなっていないようです。
ページ読み込み後に何らかの設定がなされているものと推測されますが、最終的にクリックで検索(?)が実行される仕組みは、どの様にして構成されているのでしょうか?

例えば、その設定がされる前にクリックしても何も起きないはずです。
あるいは、検索の対象となる語句などがどこかにあるかと思いますが、そちらに入力しなければ何も行われないのかも知れません。
そのあたりの仕組みにも合わせた処理にしておく必要がありそうに思います。
    • good
    • 0

こんにちは



そもそもになってしまいますが、htmlDocは取得できているのでしょうか?

それ以降に関しては、
・「IHTMLInputElement」って見かけたことないけれど、正しいのかしら?
・getElementsByTagName("div")で得られることを期待できるのはDIV要素
 なので、INPUT要素ではないはず
 (このtype違いが、エラーの直接の原因なのかも?←未確認です。)
・HTMLソースを見ると、search2のクラス名を有しているのはspan要素の
 ようなので、(多分)何も見つからずにループが終了するのが正常な処理。

あたりが怪しそうですね。
この回答への補足あり
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!