Internet explorer 带有VBA输入事件的Internet Explorer自动化
我试图使用MicrosoftAccess2003中的自动化来控制InternetExplorer9,以使用数据库数据完成表单 输入在浏览器中触发一个事件,该事件验证数据并使“保存”按钮可见。如果我使用sendkeys,则会触发事件;然而,我发现sendkeys非常不可靠。如果我更改元素的值,然后使用.firevent(“onchange”),则不会发生任何事情,甚至不会出现错误 我的问题是,我如何启动该活动。或者,我怎样才能知道运行的是什么javascript。IE是否有调试类型的插件,它会告诉我触发了什么事件?如果是这样,我可以自己运行脚本吗 我的代码如下Internet explorer 带有VBA输入事件的Internet Explorer自动化,internet-explorer,vba,automation,Internet Explorer,Vba,Automation,我试图使用MicrosoftAccess2003中的自动化来控制InternetExplorer9,以使用数据库数据完成表单 输入在浏览器中触发一个事件,该事件验证数据并使“保存”按钮可见。如果我使用sendkeys,则会触发事件;然而,我发现sendkeys非常不可靠。如果我更改元素的值,然后使用.firevent(“onchange”),则不会发生任何事情,甚至不会出现错误 我的问题是,我如何启动该活动。或者,我怎样才能知道运行的是什么javascript。IE是否有调试类型的插件,它会告诉
Set IE = CreateObject("internetexplorer.application")
IE.Visible = True
IE.Navigate "https://extranet.website.com/Planning/Edition/Periodic?language=en"
Do While IE.ReadyState <> 4 Or IE.Busy = True
DoEvents
Loop
'log in
If IE.Document.Title = "website- access" Then
IE.Document.getElementById("login_uid").Value = "username"
IE.Document.getElementById("login_pwd").Value = "password"
IE.Document.all("ButSubmit").Click
Do While IE.ReadyState <> 4 Or IE.Busy = True
DoEvents
Loop
End If
Do While Not RstAvailability.EOF
StartDate = RstAvailability!AvailDate
IE.Document.getElementById("periodStart").Value = Format(StartDate, "dd mmm yy")
IE.Document.getElementById("periodEnd").Value = Format(StartDate, "dd mmm yy")
Set LinkCollection = IE.Document.GetElementsByTagName("A")
For Each link In LinkCollection
If link.innertext = "Add" Then
link.Click
Exit For
End If
Next
Do While IE.ReadyState <> 4 Or IE.Busy = True
DoEvents
Loop
Set objRows = IE.Document.GetElementsByTagName("tr")
If RstAvailability!RoomType = "DTW" Then
n = 0
While n < objRows.Length
If Trim(objRows(n).Cells(0).innertext) = "Single Room" Then
For i = 1 To 7
'objRows(n).FireEvent ("onchange")
'objRows(n).Cells(i).GetElementsByTagName("input")(0).Focus
'SendKeys Format(RstAvailability!roomcount - RstAvailability!RoomsSold, "0") & "{TAB}"
objRows(n).Cells(i).GetElementsByTagName("input")(0).Value = Format(RstAvailability!roomcount - RstAvailability!RoomsSold, "0")
objRows(n).Cells(i).GetElementsByTagName("input")(0).fireevent ("onchange")
Do While IE.ReadyState <> 4 Or IE.Busy = True
DoEvents
Loop
Next i
End If
n = n + 1
Wend
End If
Set objButtons = IE.Document.getelementsbyname("savePlanning")
objButtons(0).Click
Do While IE.ReadyState <> 4 Or IE.Busy = True
DoEvents
Loop
newtime = Now + TimeValue("0:00:10")
Do While True
If Now > newtime Then Exit Do
Loop
RstAvailability.MoveNext
Loop
Set IE=CreateObject(“internetexplorer.application”)
可见=真实
即“导航”https://extranet.website.com/Planning/Edition/Periodic?language=en"
当IE.ReadyState 4或IE.Busy=True时执行
多芬特
环
'登录
如果IE.Document.Title=“网站-访问”,则
IE.Document.getElementById(“login\u uid”).Value=“username”
IE.Document.getElementById(“login_pwd”).Value=“password”
即文件。全部(“但提交”)。单击
当IE.ReadyState 4或IE.Busy=True时执行
多芬特
环
如果结束
不使用RstAvailability.EOF时请勿使用
StartDate=RstAvailability!有效
IE.Document.getElementById(“periodStart”).Value=格式(起始日期,“dd-mmm-yy”)
IE.Document.getElementById(“periodEnd”).Value=格式(起始日期,“dd-mmm-yy”)
Set LinkCollection=IE.Document.GetElementsByTagName(“A”)
对于LinkCollection中的每个链接
如果link.innertext=“添加”,则
链接。点击
退出
如果结束
下一个
当IE.ReadyState 4或IE.Busy=True时执行
多芬特
环
Set objRows=IE.Document.GetElementsByTagName(“tr”)
如果可用!RoomType=“DTW”然后
n=0
而n新建时间,则退出Do
环
RstAvailability.MoveNext
环
输入字段的html为:
<tr class="first" roomId="30494" articleId="0" type="Availability" readonly="False">
单人房
谢谢 经过几天的苦思冥想,答案其实很简单,但几乎不可能在MSDN上的任何文档或web上的任何其他地方找到 在更改输入字段的值之前,请先将焦点设置在该字段上。更改值后,需要将焦点设置为另一个字段。显然,这些事件是由于失去了焦点而引起的。因此,代码应如下所示:
n = 0
While n < objRows.Length
If Trim(objRows(n).Cells(0).innertext) = "Family Room" Then
For i = 1 To 7
objRows(n).Cells(i).GetElementsByTagName("input")(0).Focus
objRows(n).Cells(i).GetElementsByTagName("input")(0).Value = Format(RstAvailability!roomcount - RstAvailability!RoomsSold, "0")
Next i
objRows(n).Cells(1).GetElementsByTagName("input")(0).Focus
End If
n = n + 1
Wend
n=0
而n
我是通过查看一些有关IE9可访问性的MSDN文档来发现这一点的。它建议为残疾用户设置关注点。我只是想尝试一下,结果成功了。我希望这对其他人有帮助
Dave如果您想(在IE9中)在“下一个i”行之前加上下面一行。即使你没有失去焦点,它也应该起作用
objRows(n).Cells(i).GetElementsByTagName(“输入”)(0)。单击
干杯,这对我很有帮助
<span class="data">
<input id="Availabilities" name="Availabilities" type="text" value="" />
</span>
<span class="data">
<input id="Availabilities" name="Availabilities" type="text" value="" />
</span>
n = 0
While n < objRows.Length
If Trim(objRows(n).Cells(0).innertext) = "Family Room" Then
For i = 1 To 7
objRows(n).Cells(i).GetElementsByTagName("input")(0).Focus
objRows(n).Cells(i).GetElementsByTagName("input")(0).Value = Format(RstAvailability!roomcount - RstAvailability!RoomsSold, "0")
Next i
objRows(n).Cells(1).GetElementsByTagName("input")(0).Focus
End If
n = n + 1
Wend