[[20210616113520]] 『VBAによるIE操作(日付の入力)』(ハヤシライス) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『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


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


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.