出现弹出窗口时如何单击保存按钮?

时间:2019-07-04 21:24:37

标签: html vba internet-explorer ms-office

我正在使用Internet Explorer单击文件。我到达一个出现Internet Explorer弹出窗口的位置,说“您要打开还是保存文件?”如图片所示:

enter image description here

我想编写一个单击保存按钮的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”。。

感谢您的宝贵时间!

2 个答案:

答案 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

以下截图:

enter image description here