【问题标题】:How to trigger the hidden field using VBA in web Page如何在网页中使用 VBA 触发隐藏字段
【发布时间】:2020-12-18 16:15:26
【问题描述】:

我在使用 VBA 的网页中输入了自动数据,但是如果您选择超过 1 个月的日期,则只有一个隐藏的字段才会弹出。当我使用 VBA 输入日期时,它没有显示隐藏字段,但是当我手动输入相同的日期时,它显示隐藏字段,我需要在其中提到某些原因。 我的 VBA 代码

IE.document.getelementbyid("ctl00_ContentPlaceHolder1_txtInvoicedt").Value = Sheet5.Range("B13").Value

网页代码

<td>Invoice Date</td>
<td><input name="ctl00$ContentPlaceHolder1$txtInvoicedt" type="text" 
   id="ctl00_ContentPlaceHolder1_txtInvoicedt" autocomplete="off"  
   onblur="lostClr(this);if(this.value!=&#39;&#39;){return 
   checkDt(this,&#39;invdt&#39;);}" onchange="check_idate()" onkeypress="return 
   false;" style="width:100px;">
   <span id="ctl00_ContentPlaceHolder1_lbldelay_reason" style="visibility: 
      hidden;">Delay Reason :</span>
   <input name="ctl00$ContentPlaceHolder1$txtdelay_reason" type="text" 
      id="ctl00_ContentPlaceHolder1_txtdelay_reason" style="visibility: hidden;">
   <span id="ctl00_ContentPlaceHolder1_lblreason" style="color: red; visibility: 
      hidden;">*Min 15 chars</span>
   <input name="ctl00$ContentPlaceHolder1$btndelay_attach" type="button"
      id="ctl00_ContentPlaceHolder1_btndelay_attach" class="button_1" style="border-style: none;
      width: 350px; visibility: hidden;" value="Attach/Upload CGM&#39;s Approval"
      onclick="return openDelay_approval()">
   <input type="hidden" name="ctl00$ContentPlaceHolder1$hdndelay_attach"
      id="ctl00_ContentPlaceHolder1_hdndelay_attach">
   <input type="hidden" name="ctl00$ContentPlaceHolder1$hdndelay_attach_id"
      id="ctl00_ContentPlaceHolder1_hdndelay_attach_id">

选择日期前:

选择日期后:

【问题讨论】:

  • 在设置日期后尝试IE.document.getelementbyid("ctl00_ContentPlaceHolder1_txtInvoicedt").fireEvent("onblur");
  • 什么都没有发生

标签: excel vba internet-explorer automation


【解决方案1】:

第一个输入的onblur事件中是否显示隐藏字段功能?如果是这样,您可以使用fireEvent 来触发onblur 事件。你可以参考我下面的示例。

VBA 代码示例:

Sub LOADIE()
    Set ieA = CreateObject("InternetExplorer.Application")
    ieA.Visible = True
    ieA.navigate "https://www.example.html"
    Do Until ieA.readyState = 4
       DoEvents
    Loop
    
    Set doc = ieA.Document
    doc.getElementById("ctl00_ContentPlaceHolder1_txtInvoicedt").Value = 11
    doc.getElementById("ctl00_ContentPlaceHolder1_txtInvoicedt").fireEvent ("onblur")
End Sub

示例 HTML 页面:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
</head>
<body>
    <div>Invoice Date</div>
    <input name="ctl00$ContentPlaceHolder1$txtInvoicedt" type="text"
           id="ctl00_ContentPlaceHolder1_txtInvoicedt" autocomplete="off"
           onblur="check_date()" onkeypress="return false;" style="width:100px;">
    <span id="ctl00_ContentPlaceHolder1_lbldelay_reason" style="visibility: hidden;">Delay Reason:</span>
    <input name="ctl00$ContentPlaceHolder1$txtdelay_reason" type="text"
           id="ctl00_ContentPlaceHolder1_txtdelay_reason" style="visibility: hidden;">
    <script>
        function check_date() {
            var a = document.getElementById("ctl00_ContentPlaceHolder1_txtInvoicedt").value;
            if (a >= 10) {
                document.getElementById("ctl00_ContentPlaceHolder1_lbldelay_reason").style.visibility = "visible";
                document.getElementById("ctl00_ContentPlaceHolder1_txtdelay_reason").style.visibility = "visible";
            }
            else {
                document.getElementById("ctl00_ContentPlaceHolder1_lbldelay_reason").style.visibility = "hidden";
                document.getElementById("ctl00_ContentPlaceHolder1_txtdelay_reason").style.visibility = "hidden";
            }
        }
    </script>
</body>
</html>

【讨论】:

  • 什么都没有发生
  • 执行上面的代码有没有报错?我想和你确认一下隐藏字段在网站上是如何显示的?显示功能是在onblur 事件中还是在onchange 事件中?如果您使用我的示例 HTML 页面进行测试,那么您会发现 vba 代码可以工作。如果能提供更详细的网页代码就更好了。
  • @anujkumar 如果可行,您可以参考this 接受我的回答。它可以在未来帮助其他社区成员解决类似的问题。感谢您的理解。
猜你喜欢
  • 2019-02-13
  • 1970-01-01
  • 2021-09-23
  • 1970-01-01
  • 1970-01-01
  • 2016-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多