1

同学们,

我试图用 VBA 做 IE 自动化。在我遇到这个问题之前,一切都按我的意愿进行。 在输入文本字段中输入项目编号,然后单击链接“运行报告”以获取报告。

问题:点击“运行报告”后,没有为我在文本文件中输入的项目号提取报告。但是数据库中所有项目的报告。

可能原因: 链接中有onclick函数,不知道执行“ IE.Doucument.getElementById(runReportID).Click ”时是否调用了这个函数。我还尝试了“ IE.Document.getElementById(runReportID).FireEvent("onclick") ”和“ IE.Document.parentWindow.execScript("return ValidateDate();", "JavaScript") ”,不幸的是,他们没有工作。

当单击“运行报告”按钮时,我不知道如何将我在文本字段中输入的值传递给函数。提交的文本中有事件来完成这项工作吗?

链接“运行报告”和文本字段的 HTML 代码:

<A onclick="return ValidateDate();" id=spsCtrlDefault_ctl02_lbtn_run_qry_rpt title="Click to run report" style="CURSOR: hand; TEXT-DECORATION: none; HEIGHT: 14px; FONT-FAMILY: ariel; FONT-WEIGHT: bold; COLOR: #0033ff" href="javascript:__doPostBack('spsCtrlDefault$ctl02$lbtn_run_qry_rpt','')">[ Run Report ]</A>
<input id="spsCtrlDefault_ctl02_gvQueryColumns_ctl02_txtItem_Code" name="spsCtrlDefault$ctl02$gvQueryColumns$ctl02$txtItem_Code" size="20" class="riTextBox riEnabled" type="text" req_ind="N" tbl_idn="2" value="947519" controltype="text" datatype="varchar" col_idn="1" dbfld="item_revision.item_cde" style="text-transform: uppercase;">
<input id="spsCtrlDefault_ctl02_gvQueryColumns_ctl02_txtItem_Code_ClientState" name="spsCtrlDefault_ctl02_gvQueryColumns_ctl02_txtItem_Code_ClientState" type="hidden" autocomplete="off" value="{&quot;enabled&quot;:true,&quot;emptyMessage&quot;:&quot;&quot;,&quot;validationText&quot;:&quot;TESTVALUE&quot;,&quot;valueAsString&quot;:&quot;TESTVALUE&quot;}">

链接点击的VBA代码:

IE.Document.getElementById(runReportID).Click
4

1 回答 1

1

我终于想通了!!!

那里有一个隐藏的文本输入元素来捕获我在文本字段中输入的值。每次文本字段失去焦点时,文本字段中的值都会发送到下面隐藏的输入元素。

<input id="spsCtrlDefault_ctl02_gvQueryColumns_ctl02_txtItem_Code_ClientState" name="spsCtrlDefault_ctl02_gvQueryColumns_ctl02_txtItem_Code_ClientState" type="hidden" autocomplete="off" value="{&quot;enabled&quot;:true,&quot;emptyMessage&quot;:&quot;&quot;,&quot;validationText&quot;:&quot;TESTVALUE&quot;,&quot;valueAsString&quot;:&quot;TESTVALUE&quot;}">

将值发送到隐藏输入元素的 VB 代码:

queryID = "spsCtrlDefault_ctl02_gvQueryColumns_ctl02_txtItem_Code"
IE.Document.getElementById(queryID).FireEvent ("onblur")
于 2016-03-04T04:44:29.667 回答