【发布时间】:2017-03-26 05:04:14
【问题描述】:
我希望有人可以提供帮助。我正在尝试使用存储在 excel 中的信息来加快填写必须完成数十次或数百次的网络表单的过程。
为此,我需要一个按钮来打开一个 IE 窗口并导航到某个网站的登录页面(我已经弄清楚了这一点)。然后,用户可以登录并导航到需要填写的表格。然后,我希望用户能够返回到 excel 页面,单击另一个按钮,该按钮将自动填充几个下拉列表和文本框。
在 Excel 中,我已经有一些代码允许用户搜索需要转到表单的特定信息集,因此他们所要做的就是单击按钮将其传输过来。代码的第一部分是这样的:
Public IE As Object
Public Sub OpenIE()
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True
IE.Navigate "loginpage url"
End Sub
然而,我遇到的问题是,一旦用户登录并导航到表单,就有不同的函数访问同一个 IE 窗口。现在我有这个:
Sub FillMacro()
Dim sh As Object, oWin As Object
Set sh = CreateObject("Shell.Application")
For Each oWin In sh.Windows
If TypeName(oWin.document) = "HTMLDocument" Then
Set IE = oWin
Exit For
End If
Next
IE.Visible = True
Application.Wait (Now + TimeValue("00:00:01"))
IE.document.getElementById("idec").Value = "John"
Application.Wait (Now + TimeValue("00:00:01"))
IE.document.getElementById("idee").Value = "Smith"
End Sub
我从这个论坛上的其他帖子中获得了大部分内容,虽然我在这方面有点新手,但问题似乎是由于某种原因 VBA 找不到带有 id 的文本框姓氏或名字。更重要的是, IE.Visible = True 不会将 IE 窗口带回前台,所以我试图找到合适的行来做到这一点。当我尝试运行代码时,我在以下位置收到“需要对象”错误:
IE.document.getElementById("idec").Value = "John"
我已尝试搜索此站点并将继续查找,但在此期间任何帮助将不胜感激!
在 Internet Explorer 页面上,这是我要填充的第一个文本框的行:
<input name="componentListPanel:componentListView:1:component:patientLastNameContainer:patientLastName" class="input300" id="idec" type="text" maxlength="60" value="">
【问题讨论】:
-
该页面上是否有任何框架/iframe?
-
您能提供一个实际的网络表单 URL 吗?您也可以尝试使用 XHR 而不是 IE 自动化,您只需在手动提交表单后在 IE 开发者工具网络选项卡中检查请求,并重现它。
-
表单实际上是在一个 iframe 中。至于网址,您必须登录才能查看表单,所以我不确定我是否可以,或者如何
-
IE.document.getElementById("iFrameIdHere").document.getElementById("idec").Value = "John"
标签: vba excel internet-explorer