当前位置: 首页 > 知识库问答 >
问题:

Excel VBA在输入框填满数据后触发网页中的事件

董阳平
2023-03-14

我试图填补网页中的一个输入框,实际触发事件的结果是自动更新一些隐藏的字段。

网页背后的代码

<INPUT onchange=iCFieldChanged(this); tabIndex=1017 onkeypress="AllowOnly(event, '[()0-9-+]','');" onfocus="tbInitialValue=this.value;g_fFieldValue = this.value;g_fFieldId = this.id;" onblur="if(tbInitialValue!=this.value &amp;&amp; Page_IsValid){executingPostBack=true;__doPostBack('dnn:ctr366:ClaimPhysicianInformation:_ctl2:Datapanel:_ctl0:_ctl5:ClaimRecipient:ds_ClaimRecipient:mb_ds_ClaimRecipient', '');}g_fFieldId = null;" id=dnn_ctr366_ClaimPhysicianInformation__ctl2_Datapanel__ctl0__ctl5_ClaimRecipient_ds_ClaimRecipient_mb_ds_ClaimRecipient onpaste="return true;" style="TEXT-ALIGN: right" maxLength=10 size=11 value=9468381692 name=dnn:ctr366:ClaimPhysicianInformation:_ctl2:Datapanel:_ctl0:_ctl5:ClaimRecipient:ds_ClaimRecipient:mb_ds_ClaimRecipient>

在上面代码的第一个输入标记行上有5个事件侦听器- onblur、< code>onkeypress、< code>onfocus、< code>onchange、< code>onpaste。我可以将值传递给输入框,但是相关的事件没有被释放。

代码已尝试(无错误,但未调度事件)

ie.Document.getElementById("dnn_ctr366_ClaimPhysicianInformation__ctl2_Datapanel__ctl0__ctl5_ClaimRecipient_ds_ClaimRecipient_mb_ds_ClaimRecipient").Value = memberId
'tried with all fire event combinations but nothing works
ie.Document.getElementById("dnn_ctr366_ClaimPhysicianInformation__ctl2_Datapanel__ctl0__ctl5_ClaimRecipient_ds_ClaimRecipient_mb_ds_ClaimRecipient").FireEvent ("onkeypress")

也尝试调度事件,但显示错误

Set srchbtn = ie.Document.getElementById("dnn_ctr366_ClaimPhysicianInformation__ctl2_Datapanel__ctl0__ctl5_ClaimRecipient_ds_ClaimRecipient_mb_ds_ClaimRecipient")
    srchbtn.Value = memberId
    'getting error in next line
    Set event_onChange = ie.Document.createEvent("HTMLEvents")
    event_onChange.initEvent "keypress", True, False
    srchbtn.dispatchEvent event_onChange

还尝试了如下按键事件

Set objEvent = IE.Document.createEvent("keyboardEvent")
objEvent.initEvent "keypress", True, False
IE.Document.getElementById("dnn_ctr366_ClaimPhysicianInformation__ctl2_Datapanel__ctl0__ctl5_ClaimRecipient_ds_ClaimRecipient_mb_ds_ClaimRecipient")(0).dispatchEvent objEvent

但同样的错误出现了

错误:运行时错误“438”:对象不支持此属性或方法

由于它是一个安全的网页,我不能分享复制代码的网址,请指导我进一步的程序

共有2个答案

赫连骏
2023-03-14

这可能会帮助其他面临同样问题的人

  set srchbtn = ie.Document.getElementById("dnn_ctr366_ClaimPhysicianInformation__ctl2_Datapanel__ctl0__ctl5_ClaimRecipient_ds_ClaimRecipient_mb_ds_ClaimRecipient")
  srchbtn.Focus
  srchbtn.Value = memberId
  srchbtn.Blur
东门令
2023-03-14

没有VBA,你的输入事件能在IE中被正确触发吗?我尝试调度< code>onchange事件,它成功了。我按照这篇文章中的方法。你可以参考我下面的简单例子:

输入框:

VBA电码:

Sub LOADIE()
    Set ieA = CreateObject("InternetExplorer.Application")
    ieA.Visible = True
    ieA.navigate "http://somewebsite"
    Do Until ieA.readyState = 4
       DoEvents
    Loop

    Set doc = ieA.Document
    Set Search = doc.getElementsByName("q")(0)   
    Search.Value = "VBA"

    Dim event_onChange As Object
    Set event_onChange = ieA.Document.createEvent("HTMLEvents")
    event_onChange.initEvent "change", True, False
    Search.dispatchEvent event_onChange

    ieA.Quit
    Set ieA = Nothing
End Sub

上面的函数也适用于keypress事件。关于您收到的错误,您可以检查此线程以获取更多信息。

 类似资料:
  • 我想在我停止在输入文本框中键入字符(而不是在键入字符时)后触发一个事件。 我尝试过: 但是这个例子为每个输入的字符产生一个超时,如果我输入20个字符,我会收到大约20个AJAX请求。 在这个小提琴上,我用一个简单的警报而不是AJAX来演示同样的问题。 有解决办法吗,还是我只是用了一个糟糕的方法?

  • 我用VBA和IE编写了一个脚本来填充两个输入字段来登录网页。 当我尝试执行我的脚本时,它会抛出错误,因为输入字段在其中。如何用凭据填充两个输入字段? 这是网站链接 这是我迄今为止的尝试: 您可以尝试输入任何详细信息。我所需要知道的是我怎样才能填满这两个盒子。 连接到内容的Html元素:

  • 我有一个由事件网格事件触发的Azure函数。仅当blob上载到存储帐户时,才会创建事件网格事件。 虽然由于某些原因,该函数仍然会被同一事件触发,即使它已成功处理,但它现在已部署并运行良好? 例子: 今天我查看了日志,该函数已继续执行! 错误:“Blob不存在” 代码片段: 编辑1:这仍在发生,这次有点不同。 现在,EventGrid在成功传递消息和函数运行后继续触发 我如何调试它?

  • 我正在寻找合适的资源/教程,可以帮助我开发和部署事件网格触发器,该触发器将等待图像上传到blob容器,使用python处理该图像,然后将结果保存在另一个blob容器中。我发现了许多单独的文档,它们不一定在逻辑上指导我使用Azure Portal和VSCode进行开发和部署,就像从头到尾的一步一步的演练,介绍了实现这一点的所有步骤。 任何指导将不胜感激。

  • 问题内容: 浏览器仅在提交表单时选中复选框输入值数据,这是浏览器的标准行为吗? 如果未提供任何值数据,默认值是否始终为“ on”? 假设以上内容正确,那么在所有浏览器中这种行为是否一致? 问题答案: 是的,标准行为是仅在选中复选框后才发送值。通常,这意味着您需要记住在服务器端期望使用的复选框的方式,因为并非所有数据都从表单返回。 默认值始终为“ on”,这在所有浏览器中都应保持一致。 W3C HT

  • 我的Azure Functions事件网格触发器没有触发。我是这么做的。 Key Vault设置为将事件报告给EventGrid系统主题 此主题由将事件传递到Azure Function的订阅订阅 函数有一个事件网格触发器(见下文,默认由门户创建): 我用谷歌搜索了一下,对于这样的入门级方案,没有更多的指导。我想的也许是授权...订阅如何触发该函数?在此过程中(通过GUI /门户配置),没有任何关