Javascript Excel VBA在IE11中使用自动完成功能填充文本框

Javascript Excel VBA在IE11中使用自动完成功能填充文本框,javascript,vba,excel,internet-explorer-11,Javascript,Vba,Excel,Internet Explorer 11,如何使用Excel VBA填充使用javascript建议可用条目的文本框?手动填充文本框,我会开始输入几个字母,文本框下方会出现一个可供选择的可用输入列表。我需要用鼠标单击或使用箭头键导航到javascript下拉框中所需的条目,然后单击enter 这是与其他常规输入框的关键区别。如果我只是在输入框中输入文本,然后进入下一个输入框,而没有从下拉框中选择条目,则输入不会注册。因此,我无法简单地找到输入框的元素并更改其值。我相信我需要执行javascript来激活下拉框,然后我必须从中选择下拉框

如何使用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">                                    
通过将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
但什么都没起作用


有人能帮忙吗?我想我已经用尽了谷歌来寻找解决方案。

使用sendkeys,我可以填充输入框,等待建议的输入显示在下拉框中,然后模拟“回车”键来注册输入。我发现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执行过程中的任何时候单击另一个窗口,此脚本将失败。我希望有人能提供更可靠的解决方案。

Y-E-S!我终于找到了一些不使用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
在这个答案变得完美之前,我只想改变一件事,那就是用更健壮的行替换应用程序。等待时间。尝试下面的代码无效。我能告诉ExcelVBA在继续之前等待javascript完成加载吗

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

我想没有可共享的URL了吧?你有没有试过把事件组合起来?有时你需要一个特定的顺序来模仿你的键盘动作。有时我会发现SendKeys down和tab是一些有用的技巧来尝试。@QHarr,你是对的,很抱歉没有URL可供共享。我尝试过以不同的顺序和组合调用javascript事件,但没有任何效果。这是大海捞针,因为我甚至不知道每个活动应该做什么。我会说我已经能够激活一个下拉输入框,其形式为:Set objEvent=IE.Document.createEvent(“HTMLEvents”)objEvent.initEvent“change”,False,True IE.Document.getElementById(“DropdownInput”).dispatchEvent objEvent
While IE.Busy Or IE.ReadyState <> 4: DoEvents: Wend