我正在使用Internet Explorer单击文件。我到达一个出现Internet Explorer弹出窗口的位置,说“您要打开还是保存文件?”如图片所示:
我想编写一个单击保存按钮的VBA代码。
我意识到不可能右键单击并“检查元素”以显示HTML页面,因为弹出窗口不是Internet Explorer网页的一部分。
所以我尝试了sendKeys方法,即使它不可靠。我尝试了其他选项,例如:
Application.SendKeys "%S"
Application.SendKeys "%s"
Application.SendKeys "%{S}"
Application.SendKeys "%{s}"
SendKeys ("%S")
SendKeys ("%s")
SendKeys ("%{S}")
SendKeys ("%{s}")
Application.SendKeys "%{S}"
但是它们都不起作用。当我运行代码时,实际上都没有保存文件。我很想知道是否有人可以帮助我弄清楚我的错误在哪里?或者,如果您还有其他建议,请单击该“保存”按钮。
也许我正在使用SendKeys的对象不应该是“ Application”。。
感谢您的宝贵时间!
答案 0 :(得分:0)
如果您希望使用UIAutomationCore.dll并引用它,则可以执行以下操作:
Public Function AutoSave() As Boolean
On Error Goto handler
Dim sysAuto As New UIAutomationClient.CUIAutomation
Dim ieWindow As UIAutomationClient.IUIAutomationElement
Dim cond As IUIAutomationCondition
Set cond = sysAuto.CreateAndCondition(sysAuto.CreatePropertyCondition(UIA_NamePropertyId, "Notification"), _
sysAuto.CreatePropertyCondition(UIA_PropertyIds.UIA_ControlTypePropertyId, UIA_ToolBarControlTypeId))
Set ieWindow = sysAuto.GetRootElement.FindFirst(TreeScope_Descendants, cond)
Dim tField As UIAutomationClient.IUIAutomationElement
Dim tFieldCond As IUIAutomationCondition
Set tFieldCond = sysAuto.CreatePropertyCondition(UIA_ControlTypePropertyId, UIA_ControlTypeIds.UIA_SplitButtonControlTypeId)
Set tField = ieWindow.FindFirst(TreeScope_Descendants, tFieldCond)
Dim invPattern As UIAutomationClient.IUIAutomationInvokePattern
Set invPattern = tField.GetCurrentPattern(UIA_InvokePatternId)
invPattern.Invoke
AutoSave = True
Exit Function
handler:
End Function
然后在单击该项目后调用该例程-可能要给它一个艰苦的等待,以允许显示通知栏。
答案 1 :(得分:0)
再现我的问题,看来在单击“保存”按钮之前,我们需要时间来显示弹出文件下载提示。因此,请尝试使用Application.Wait方法等待提示显示。
这样的代码:
Sub Test()
Dim ie As Object
Dim Rank As Object
Set ie = CreateObject("InternetExplorer.application")
ie.Visible = True
ie.Navigate ("http://localhost:54382/HtmlPage47.html")
Do
If ie.ReadyState = 4 Then
Exit Do
Else
End If
Loop
Set doc = ie.document
doc.getElementsByTagName("tr")(1).getElementsByTagName("td")(5).getElementsByTagName("a")(0).Click
Application.Wait (Now + TimeValue("0:00:02"))
Application.SendKeys "%{S}"
End Sub
以下截图: