簡體   English   中英

IE11中具有自動完成功能的Excel VBA填充文本框

[英]Excel VBA fill textbox with autocomplete in IE11

如何使用Excel VBA填充使用javascript建議可用條目的文本框? 手動填充文本框后,我將開始輸入幾個字母,然后在文本框下方顯示可供選擇的可用輸入列表。 我需要用鼠標單擊或使用箭頭鍵導航至javascript下拉框中所需的條目,然后單擊Enter。

這是與其他常規輸入框的主要區別。 如果我只是在輸入框中輸入文本並繼續進行下一個輸入框,而沒有從下拉框中選擇條目,則輸入不會注冊。 因此,我不能簡單地找到輸入框的元素並更改其值。 我相信我需要執行激活下拉框的JavaScript,然后必須從中選擇。

輸入文本框的HTML代碼為:

<td id="input2" class="createInputField" colspan="0" valign="middle"
  <input value="" id="" name="docTypeDisplay" title="Document Type" size="18" type="text">
  <input value="" name="docType" type="hidden">
  <input value="" name="docTypeID" type="hidden">                                    

上面的代碼的第一個輸入標記行上有5個事件偵聽器-來自javascript的模糊,dblclick,focus,keydown和keypress。 我嘗試查找javascript,但它不容易理解,而且很大! 因此,請牢記此限制,這是我嘗試的方法:

IE.Document.getElementById("input2").getElementsByTagName("input")(0).Value = "Monthly Report"
Set objEvent = IE.Document.createEvent("HTMLEvents")
objEvent.initEvent "change", False, True
IE.Document.getElementById("input2").getElementsByTagName("input")(0).dispatchEvent objEvent

以及通過將objEvent.initEvent中的第一個參數更改為“ blur”,“ dblclick”,“ focus”,“ keydown”和“ keypress”進行更改。 我沒有收到任何錯誤,輸入也沒有注冊。

然后我嘗試了:

IE.Document.getElementById("input2").getElementsByTagName("input")(0).Value = "Monthly Report"       
IE.Document.getElementById("input2").getElementsByTagName("input")(0).FireEvent ("onchange")

並且還嘗試了:

IE.Document.getElementById("input2").getElementsByTagName("input")(0).Focus  
IE.Document.getElementById("input2").getElementsByTagName("input")(0).Value = "Monthly Report"
IE.Document.getElementById("input2").getElementsByTagName("input")(0).Blur

沒有任何效果。

有人可以幫忙嗎? 我想我已經用盡了谷歌尋找解決方案。

使用sendkey,我能夠填充輸入框,等待建議的輸入出現在下拉框中,然后模擬“ Enter”鍵來注冊輸入。 我發現Application.SendKeys“ Enter”不起作用,因此我不得不即興創作。 我懷疑“ Enter”鍵可能與Keypress javascript事件有關。

IE.Document.getElementById("input2").getElementsByTagName("input")(0).Focus
Application.SendKeys "Monthly Report"
Application.Wait (Now + TimeValue("0:00:05"))   'Wait for javascript to fire and suggest an input
Application.SendKeys "~"    'This simulates an "Enter" keypress on the first suggested input

盡管如果我在Excel VBA執行期間的任何時候單擊另一個窗口,該腳本都會失敗。 我希望有人會提出更可靠的解決方案。

是! 我終於找到了在不使用SendKeys的情況下經過反復試驗的工作。 感謝@QHarr建議嘗試合並事件,這使我朝着正確的方向前進。 所以這對我有用:

'First fill the input box with text
IE.Document.getElementById("input2").getElementsByTagName("input")(0).Value = "Monthly Report"

'Fire the keypress event to start the javascript to suggest an input
Set objEvent = IE.Document.createEvent("keyboardEvent")
objEvent.initEvent "keypress", True, False
IE.Document.getElementById("input2").getElementsByTagName("input")(0).dispatchEvent objEvent

'Wait for a few seconds for the javascript to complete creating the dropdown box
Application.Wait (Now + TimeValue("0:00:05"))

'Select the first suggested input from the dropdown box. I noticed a new element was created when the dropdown box appeared, which I simulated a click on.
IE.Document.getElementById("suggest_input2").getElementsByClassName("object")(0).Click

在此答案完美之前,我只想更改一件事,那就是用更可靠的代碼行替換application.wait時間。 嘗試下面的代碼不起作用。 有什么想法可以告訴Excel VBA等待javascript完成加載然后繼續嗎?

While IE.Busy Or IE.ReadyState <> 4: DoEvents: Wend 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM