『VBAによるIE操作(日付の入力)』(ハヤシライス) お世話になります。 VBAでIEの制御を行おうとしています。 「開始日」と「終了日」を入力後、「検索」ボタンを押して該当のデータを検索したいと考えています。 このとき、VBAでValueに値を入れると、見た目はデータが入力されたように見えるのですが、「検索」ボタンをVBAからクリックする瞬間に、「開始日」「終了日」ともに空欄になって、検索結果も期間を指定しないものになります。 該当箇所のソースは以下になります(Classの値はダミーです)。 また、開発者ツールで該当箇所を表示したあと、「イベント」を見ると「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 ---- change様 ありがとうございます。 確かにイベントとしてInvalidを指定するのはどうかなと思い、 ご指摘いただいた「change」も試したのですが、だめでした。 試したのは、 ・invalid ・change ・click となります。 (ハヤシライス) 2021/06/21(月) 09:15 ---- input操作は、難しいの頑張って。 自分も思い通りにセルの情報を反映させるのに1か月かかったよ… 参考になるか解りませんが 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 ---- change様 非常に丁寧なコメントありがとうございます。 IEの操作はやはり難しいんですね。 頂いたヒントを元に試行錯誤してみます。 ありがとうございます。 (ハヤシライス) 2021/06/21(月) 14:50