【问题标题】:Open IE and Interact with Web Form using Excel VBA使用 Excel VBA 打开 IE 并与 Web 窗体交互
【发布时间】:2019-03-13 01:56:05
【问题描述】:

我正在尝试创建一个带有登录页面的 Excel 电子表格,在该页面中我输入了特定的周数、期间数和/或年份。
然后我会单击一个按钮打开 Internet Explorer 实例,导航到 Web 表单,从电子表格的单元格中输入数据,然后加载选定的报告。

网络表单代码

<br>





<body>

</body>
</html>


<head>
<!--include file="../../Connections/SQL.asp" -->





<title>Performance Reporting</title>

<link href="../../CSS/KPI_Style.css" rel="stylesheet" type="text/css">


<link href="../../CSS/KPI_Style.css" rel="stylesheet" type="text/css">
<link href="../CSS/KPI_Style.css" rel="stylesheet" type="text/css">
<style type="text/css">
<!--
.style45 {color: #990000}
-->
</style>

<script type="text/javascript" language="javascript">
    <!--
     
    function makeDisable(){
    var y=document.getElementById("store")
    var x=document.getElementById("CHNSplits")
    if (y.value=='CP11')
    {    
    x.disabled=true
    }
}
function makeEnable(){
    var x=document.getElementById("CHNSplits")
    x.disabled=false
}

    -->
    </script>

</head>



<body>



<div align="center">
  
<link href="../CSS/PL_Style.css" rel="stylesheet" type="text/css" />

<style type="text/css">
<!--
.style2 {font-size: 16px}
.style33 {color: #ffffff}

-->
</style>

<table width="100%" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td bgcolor="#001446" class="border9"><div align="left"><img src="80.gif" alt="DSGi"  /></div></td>
    <td valign="bottom" bgcolor="#001446" class="border16"><div align="right" class="xbig style1 style33"><span class="style2">Store Performance</span>&nbsp;</div></td>
  </tr>
</table>



<br>
<br>






<style type="text/css">
<!--
body,td,th {
    font-family: Arial, Helvetica, sans-serif;
}
body {
    background-image: url();
}
.style1 {
    color: #d33;
    font-size: 18px;
}
.style2 {color: #000000; font-size: 2px; }
.style10 {color: #d33}
.style15 {font-size: 12px}
-->
</style>
  <title></title>
  
</div>
<link href="../../../Testing/KPI/NewKPI/Digital_KPI/stylesheet.css" rel="stylesheet" type="text/css">
<div align="center"><span class="reportname"> Reporting Selection</span></div>
<form name="form1" id="form1" method="post" action="Get_Page_V4.asp">
<input name="store" type="hidden" value="2397" >
<input name="ViewType" type="hidden" value="store" >

  <table width="60%" border="1px" align="center" cellpadding="0" cellspacing="0" bordercolor="#000000">
  
      <td colspan="2"><div align="center" class="formnamesmall">
          <table width="100%"  border="0" cellspacing="0" cellpadding="0">
            <tr height="4">
            <td></td>

          </tr>

          <tr height="5">
            <td></td>
            <td></td>
            <td></td>
            <td></td>
            <td></td>
          </tr>
    
      
          <tr>
           <td colspan="6"><div align="center" class="formtextverylarge">Selected Location:</span> 1111</div></td>
            </tr>  
          <tr>
            <td><input name="RadioGroup1" type="radio" value="1" checked></td>
              <td class="formnamesmall" ><strong>Yesterday</td>
              <td class="formtext">&nbsp;</td>
              <td class="formtext">&nbsp;</td>            
              <td class="formtext">&nbsp;</td>
              <td class="formtext">&nbsp;</td>
          </tr>
          <tr height="15">
            <td height="10"></td>
              <td height="10" class="formtext"></td>
              <td height="10" class="formtext"></td>
              <td height="10" class="formtext"></td>              
              <td height="10" class="formtext"></td>
              <td height="10" class="formtext"></td>
          </tr>
          <tr class="formtext">
            <td><input type="radio" name="RadioGroup1" value="2"></td>
              <td class="formnamesmall" ></td>
              <td class="formtext">&nbsp;</td>
              <td class="formtext">&nbsp;</td>            
              <td class="formnamesmall"> </td>
              <td class="formtext">
<input name="datebox" type="hidden" id="datebox" value="07/10/2018" size="10" maxlength="10"></td>
          </tr>
          <tr height="15">
            <td height="10"></td>
              <td height="10" class="formtext"></td>
              <td height="10" class="formtext"></td>
              <td height="10" class="formtext"></td>              
              <td height="10" class="formtext"></td>
              <td height="10" class="formtext"></td>
          </tr>
          <tr>
            <td><input type="radio" name="RadioGroup1" value="3"></td>
              <td class="formnamesmall" ><strong>Week</td>
              <td class="formtext">&nbsp;</td>
              <td class="formtext">&nbsp;</td>            
              <td class="formnamesmall">Enter Week </td>
              <td class="formtext">
<input name="week" type="text" id="week" value="24" size="2" maxlength="2"></td>
          </tr>
          <tr>
            <td>&nbsp;</td>
              <td class="formtext">&nbsp;</td>
              <td class="formtext">&nbsp;</td>            
              <td class="formtext">&nbsp;</td>
              <td class="formnamesmall">Enter Financial Year </td>
              <td class="formtext">
<input name="weekyear" type="text" id="weekyear" value="2019" size="4" maxlength="4"></td>
          </tr>
          <tr height="15">
            <td height="10"></td>
              <td height="10" class="formtext"></td>
              <td height="10" class="formtext"></td>
              <td height="10" class="formtext"></td>              
              <td height="10" class="formtext"></td>
              <td height="10" class="formtext"></td>
          </tr>
          <tr class="formtext">
            <td><label>
              <input type="radio" name="RadioGroup1" value="4">
            </label></td>
              <td class="formnamesmall" ><strong>Period</td>
              <td class="formtext">&nbsp;</td>
              <td class="formtext">&nbsp;</td>            
              <td class="formnamesmall">Enter Period </td>
              <td class="formtext">
<input name="period" type="text" id="period" value="6" size="2" maxlength="2"></td>
          </tr>
          <tr class="formtext">
            <td>&nbsp;</td>
              <td class="formtext">&nbsp;</td>
              <td class="formtext">&nbsp;</td>            
              <td class="formtext">&nbsp;</td>
              <td class="formnamesmall">Enter Financial Year </td>
              <td class="formtext">
<input name="periodyear" type="text" id="periodyear" value="2019" size="4" maxlength="4"></td>
          </tr>
         <tr height="15">
            <td height="10"></td>
              <td height="10" class="formtext"></td>
              <td height="10" class="formtext"></td>
              <td height="10" class="formtext"></td>              
              <td height="10" class="formtext"></td>
              <td height="10" class="formtext"></td>
          </tr>
         <tr height="15">
            <td height="10"></td>
              <td height="10" class="formtext"></td>
              <td height="10" class="formtext"></td>
              <td height="10" class="formtext"></td>              
              <td height="10" class="formtext"></td>
              <td height="10" class="formtext"></td>
          </tr>
          <tr class="formtext">
            <td><input type="radio" name="RadioGroup1" value="6"></td>
              <td class="formnamesmall" ><strong>Year </td>
              <td class="formtext">&nbsp;</td>
              <td class="formtext">&nbsp;</td>            
              <td class="formnamesmall">Enter Financial Year </td>
              <td class="formtext">
<input name="YearYear" type="text" id="YearYear" size="4" maxlength="4" value="2019" ></td>
          </tr>
            <tr><td height="10">&nbsp;</td>
            <td height="10">&nbsp;</td>
            <td height="10">&nbsp;</td>
            <td height="10">&nbsp;</td>
            <td height="10">&nbsp;</td>                                             
            <td height="10">&nbsp;</td>                                                         
            </tr>
            <!--
            <tr>
            <td colspan="4"><div align="center"><span class="formnamesmall style45">Select Report Type</span></div></td> 
            <td>&nbsp;</td>
            <td colspan="2" class="formname" ><strong></td>
            </tr>
            -->
            <td height="10">&nbsp;</td> 
            <td height="10">&nbsp;</td> 
            <td height="10">&nbsp;</td> 
            <td height="10">&nbsp;</td> 
            <td height="10">&nbsp;</td> 
            <td height="10">&nbsp;</td>                                                             
            <tr>
  <!--          
            <td><div align="center">
              <input name="RadioGroup2" type="radio" class="Style10" value="1" >
              </div></td> 
             
                        
            <td>
              <div align="right" class="formnamesmall style45">
                <div align="left">Charts </div>
              </div></td>
             -->
         
    
              <input name="RadioGroup2" type="hidden" class="Style10" value="6"  checked="Checked">
     
            <!--
            <td><div align="right" class="formnamesmall">
              <div align="left" class="style45">League Tables 
                </div>
            </div></td>
    -->         
            <td class="formnamesmall" colspan="4">&nbsp; </td>
            <td><input type="submit" name="Submit" value="Display Report"></td>
            </tr>
    
        </table>        

        <p> </p>

        </div></td>
    </tr>
  </table>
<input name="page_name" type="hidden" value="Region_Page1_" />
</form>
<br>
<br>
<style type="text/css">
<!--
.style1 {
    font-size: 10px;
    color: #FFFFFF;
}
-->
</style>
<table width="100%" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
  <td valign="bottom" bgcolor="#001446"><div align="right" class="xbig style1 style1">&nbsp;</div></td> 

  </tr>
</table>



</body>

VBA 代码

Sub Get_Data()
    Dim i As Long
    Dim IE As Object
    Dim objElement As Object
    Dim objCollection As Object
    Dim HWNDSrc As Long
    Dim dates As Object
    
    Set IE = CreateObject("InternetExplorer.Application")
    
    With IE
        .Visible = True
        .navigate "http://INTRANETSITE/Summary_Select.asp"
    
        Do Until .readyState = 4 And Not .Busy
            DoEvents
        Loop
    
        .document.all.Item("radioGroup1")(3).Checked = True   'Select the 4th checkbox down on the list
        .document.forms(0).submit                             'Submit the form to generate the result
    End With
    
    Pause (2)
        
    With IE
        .navigate "http://INTRANETSITE/ReportDetail2.asp?"
        
        Do Until .readyState = 4 And Not .Busy
            DoEvents
        Loop
    End With
End Sub

上面的代码导航到 web 表单并选择了第 4 个单选按钮,用于周期报告,然后提交表单并显示第一页。

如何与文本框交互以修改我想要选择报告的周或期间?

此外,当它尝试导航到 ReportDetail2.asp 时,它会返回以下错误,然后使 VBA 代码崩溃。

对象“IWebBrowser2”的“导航”方法失败

这样做的长期目标是浏览 20 多页的报告,将每个表格中的数据拉到电子表格上的一个标签中,这样如果它无法在报告之间导航,甚至在我们到达代码之前拉取数据,那就有问题了。

【问题讨论】:

  • @QHarr 根据要求在一个新问题中进行了总结,并包含了迄今为止我最成功的 VBA 代码混搭。

标签: asp.net excel vba web-scraping html-table


【解决方案1】:

尝试以下方法。我正在展示您可能会考虑的不同选项,因此请记住将您不想使用的选项注释掉。

您需要通过 VBE > Tools > References 添加对 Microsoft Internet Controls 的引用或使用后期绑定调用

Dim ie As New InternetExplorer : Set ie = CreateObject("InternetExplorer.Application")

VBA:

Option Explicit
Public Sub MakeSelections()
    Dim ie As New InternetExplorer
    Const URL As String = "yourURL"
    With ie
        .Visible = True
        .navigate URL

        While .Busy Or .readyState < 4: DoEvents: Wend

        With .document
            .querySelector("[value='1']").Checked = True 'Yesterday. CSS attribute = value selector
            .querySelector("[value='3']").Checked = True 'Week
            .querySelector("[value='4']").Checked = True 'Period
            .querySelector("[value='6']").Checked = True 'Year
            .getElementById("week").Value = 6 'week value
            .getElementById("weekyear").Value = 2018 'financial year value
            .getElementById("period").Value = 6 'period value
            .getElementById("periodyear").Value = 2018 'period financial year value
            .getElementById("yearyear").Value = 2019 'financial year value
            .querySelector("[value='Display Report']").Click 'display report
        End With
        Stop '<== Delete me later
        '.Quit '<== Remember to quit application
    End With
End Sub

【讨论】:

  • 这会返回错误“未定义用户定义的类型”,当我单击确定时,突出显示该行:
  • Dim ie As New InternetExplorer
  • 您需要通过 VBE > Tools > References 添加对 microsoft Internet 控件的引用或使用后期绑定 Dim ie As New InternetExplorer : Set ie = CreateObject("InternetExplorer.Application")
  • 好吧,这绝对完美......我已经将“Value =”更改为引用单元格,再次,工作一种享受......然后我是否只需使用“.forms(0) .Submit”从我的原始代码中获取表单提交并显示结果?还是有更好的方法来做到这一点?
  • 此行生成报告:.querySelector("[value='Display Report']").Click
猜你喜欢
  • 1970-01-01
  • 2011-02-18
  • 1970-01-01
  • 2019-01-06
  • 2023-04-09
  • 2022-07-20
  • 2013-09-06
  • 1970-01-01
  • 2019-01-11
相关资源
最近更新 更多