[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『VBAによるIE操作(日付の入力)』(ハヤシライス)
お世話になります。
VBAでIEの制御を行おうとしています。
「開始日」と「終了日」を入力後、「検索」ボタンを押して該当のデータを検索したいと考えています。
このとき、VBAでValueに値を入れると、見た目はデータが入力されたように見えるのですが、「検索」ボタンをVBAからクリックする瞬間に、「開始日」「終了日」ともに空欄になって、検索結果も期間を指定しないものになります。
該当箇所のソースは以下になります(Classの値はダミーです)。
<input name="firstEntryDataFrom" class="dummy" aria-invalid="false" type="datepicker" placeholder="YYYY/MM/DD" value=""/>
また、開発者ツールで該当箇所を表示したあと、「イベント」を見ると「invalid」とありました。
なお、実際の画面では「開始日」「終了日」それぞれのテキストボックスの右側にカレンダーを表示するボタンがあり、カレンダーからの入力も、手入力による直接入力もどちらも可能になっています。
手入力で入力時は、日付を1文字入力するたびにテキストボックの下に「日付が正しく有りません」というメッセージが表示され、最終的に日付の入力が終わった時点で、メッセージが消えます。
このことから、何かしらイベントが走っているのだと考え、
以下の様に記述しましたがうまくいきません。
Dim evt1
Set evt1 = .createEvent("HTMLEvents")
evt1.initEvent "Invalid", True, False
objIE.Document.getElementsByName("firstEntryDateFrom")(0).Value = Format(now, "yyyy/mm/dd")
objIE.Document.getElementsByName("firstEntryDateFrom")(0).dispatchEvent evt1
SendKeysを使う方法も試しました。SendKeysだと日付を認識はするのですが、やはり不安定なので、できれば避けたいと考えています。
ヒントでも良いのでご教示いただけないでしょうか?
何卒よろしくお願いいたします。
< 使用 Excel:Office365、使用 OS:Windows10 >
>このとき、VBAでValueに値を入れると、見た目はデータが入力されたように見えるのですが、 >「検索」ボタンをVBAからクリックする瞬間に、
アイデアだけですが、、
Valueに値を代入したあと、すぐ検索ボタンをクリックせず、 当該各InputオブジェクトをClickだか、MouseDownだか、MouseUpだか(Down/Up 両方続けてだか)したら 本来の入力イベントが発生しないですか?
(半平太) 2021/06/16(水) 17:06
ありがとうございます。
ヒントでも嬉しいです。
確かにその方法だと行けるかもしれません。
試してみます。
ありがとうございます。
(ハヤシライス) 2021/06/16(水) 17:25
半平太様に頂いたヒントを元に、Valueに値を設定後、いろいろイベントを発行してみたのですが、
やはりうまくいきませんでした。
そこで、SendKeysを使って次のコードを試したところ、SendKeysの直後に対象のテキストボックスの値が消えてしまいます。
objIE.Document.getElementsByName("firstEntryDateFrom")(0).Value = Format(now, "yyyy/mm/dd")
objIE.Document.getElementsByName("firstEntryDateFrom")(0).Focus
SendKeys "{ENTER}"
Valueで入力した値がきちんと入力できていないように見えるのですが、こういうことってあるんでしょうか?
(ハヤシライス) 2021/06/18(金) 14:11
専門ではありませんが
invalid ? 無効?
Set evt = objIE.document.createEvent("HTMLEvents")
evt.initEvent "change", True, False
違ってたらスルーしてください。
(change) 2021/06/18(金) 22:37
ありがとうございます。
確かにイベントとしてInvalidを指定するのはどうかなと思い、
ご指摘いただいた「change」も試したのですが、だめでした。
試したのは、
・invalid
・change
・click
となります。
(ハヤシライス) 2021/06/21(月) 09:15
参考になるか解りませんが
For eachで全ての要素をチェックする?
Tagがinputのhtml(outerhtml)内に「該当箇所」が含まれていたら
Dim objIE As InternetExplorer Dim objTag As Object Set objIE = CreateObject("InternetExplorer.Application")
For Each objTag In objIE.document.getElementsByTagName("input") If InStr(objTag.outerHTML, "firstEntryDateFrom") > 0 Then objTag.Click Exit For End If Next
objTag.Clickなのか、下記方法かは自分で試してくださいな
objTag.Value =反映情報
でダメなら検索で
javascript , イベント , 強制発火 , VBA
などなど
でダメならIE専門の質問サイトで質問する!!
例 : Q&Aコーナーあるよ
https://www.vba-ie.net/
それでも苦労するなら
IEはいつまで使用できるか解らないので
Seleniumを使用して、Chromeを操作する
(change) 2021/06/21(月) 11:55
非常に丁寧なコメントありがとうございます。
IEの操作はやはり難しいんですね。
頂いたヒントを元に試行錯誤してみます。
ありがとうございます。
(ハヤシライス) 2021/06/21(月) 14:50
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.