excel - 如何使用 VBA/Excel 使用 IE 自动化数据输入过程?
问题描述
我对 VBA 非常熟悉,并且正在尝试使用 VBA 在 Excel 中设置一个宏表,以部分自动化我公司的手动数据输入过程,以帮助减少时间和错误成本。
一个成功的脚本将完成以下任务:
- 启动 IE 并导航到指定的网站。
- 使用提供的凭据登录。
- 在具有唯一 ID 的字段中输入一个值,然后按“下一步”按钮
- 在 200 个字段中输入相应的数据,每个字段都有唯一的 ID(例如,LastName_0 对应于单元格 A2,LastName_1 对应于 A3,等等)
目前我只完成了第 1 步,其中脚本启动 IE 并导航到有问题的网站(https://iapps.courts.state.ny.us/chrs/SignIn),但是,我得到了一个运行时尝试插入站点的用户名和密码时出现错误 438(对象不支持此属性或方法)。
我尝试了在谷歌搜索中找到的多个不同代码,所有这些代码都返回相同的错误。目前,我在宏工作簿的第 2 页上列出了用户名和密码,如代码中所引用。鉴于我缺乏知识,我不确定我的错误存在于哪里。
作为参考,我们在 VBA 7.1、Excel 2013 和 IE 11 上运行。
Sub login()
Const Url$ = "https://iapps.courts.state.ny.us/chrs/SignIn"
Dim UserName As String, Password As String, LoginData As Worksheet
Set LoginData = ThisWorkbook.Worksheets("Sheet2")
UserName = LoginData.Cells(1, "B").Value
Password = LoginData.Cells(2, "B").Value
Dim ie As Object
Set ie = CreateObject("InternetExplorer.Application")
With ie
.navigate Url
ieBusy ie
.Visible = True
Dim oLogin As Object, oPassword As Object
Set oLogin = .document.getElementsByName("txtUserName")(0)
{This is where the 438 error occurs ^}
Set oPassword = .document.getElementsByName("pwPassword")(0)
oLogin.Value = UserName
oPassword.Value = Password
.document.forms(0).submit
End With
End Sub
Sub ieBusy(ie As Object)
Do While ie.Busy Or ie.readyState < 4
DoEvents
Loop
End Sub
目前,工作表 2 在单元格 B1 中设置了用户 ID,在单元格 B2 中设置了密码。
预期结果将是成功登录,此时我将努力找出要遵循的页面和实际数据输入页面的代码。
解决方案
使用适当的页面加载等待。使用 id 以及它们更快。我使用 css id 选择器 eg #txtUserName
,它相当于getElementById
但更快。
Option Explicit
'VBE > Tools > References: Microsoft Internet Controls
Public Sub Login()
Dim ie As InternetExplorer
Const URL As String = "https://iapps.courts.state.ny.us/chrs/SignIn"
Dim userName As String, password As String, loginData As Worksheet
Set ie = New InternetExplorer
Set loginData = ThisWorkbook.Worksheets("Sheet2")
userName = loginData.Cells(1, "B").Value
password = loginData.Cells(2, "B").Value
With ie
.Visible = True
.Navigate2 URL
While .Busy Or .readyState < 4: DoEvents: Wend
With .document
.querySelector("#txtUserName").Value = userName
.querySelector("#pwPassword").Value = password
.querySelector("#btnSubmit").Click
End With
Stop
End With
End Sub
推荐阅读
- javascript - 基于数组创建新数组
- java - IntelliJ:无法识别 Spring 注释/不触发自动导入。手动导入作品
- .htaccess - URL 重写 URL 参数
- scala - scala加载配置地图地图
- ios - CollectionView 未按预期显示 3 列
- excel - 使用 Application.Run 运行基本的 VBA 函数
- ios - 如何强制 NSUserActivity 保存?
- tensorflow - Keras 更改功能 API 的输入形状 - 尝试将值 (None) 转换为不受支持的类型 (
) 到张量 - http - 来自客户端服务器的 http 连接错误代码
- javascript - React + Leaflet - 图层的 Setstyle 正在绘制多个 CircleMarkers