14

这是我在stackoverflow上的第一个问题!

我一直在寻找解决这个问题的方法,但没有找到任何帮助。我可能只是在搜索中使用了错误的关键字,但到目前为止我还没有运气。这是问题:

在 VBA 中,如何从 Internet Explorer 的文件下载对话框中选择“打开”选项?

只是为了进一步澄清,我说的是下载文件时在 IE9 屏幕底部弹出的橙黄色条。

我正在做一些 VBA 自动化以使用 Internet Explorer 从 Web 下载数百个 PDF,但是有一个中间步骤,在我获得实际 PDF 之前必须打开一个 .fdf 文件。所以我首先需要选择“打开”选项,这样我才能继续进行自动化的下一步。就像我之前说的,我已经做了很多搜索,到目前为止还没有运气。

我尝试过使用SendKeys,希望击球Enter能奏效,这是最后的努力,但没有奏效。

在此先感谢您的帮助!

4

3 回答 3

4

我在这里广泛地介绍了这一点。

主题VBA/VB.Net/VB6-点击IE下载窗口上的打开/保存/取消按钮-第一部分

链接http ://www.siddharthout.com/2011/10/23/vbavb-netvb6click-opensavecancel-button-on-ie-download-window/


编辑 (IMP) 如果您使用的是 IE 9,请不要忘记阅读第 2 部分,因为它包含并涵盖了 IE 9 下载窗口的窗口结构


主题VBA/VB.Net/VB6-点击IE下载窗口打开/保存/取消按钮-第二部分

链接http ://www.siddharthout.com/2012/02/02/vbavb-netvb6click-opensavecancel-button-on-ie-download-window-part-ii/

上面的链接讨论了如何使用 API 来实现你想要的。

从第一个链接...

像你我一样,我们都有名字,同样的窗口也有“句柄”(hWnd)、类等。一旦你知道 hWnd 是什么,与那个窗口交互就更容易了。

Findwindow API 在这种情况下通过使用类名和窗口标题(“文件下载”)来查找特定窗口的 hWnd。“打开”、“保存”和“取消”按钮本身就是窗口,但它们是“文件下载”主窗口的子窗口。这意味着其中的每一个也将有一个 hWnd :) 要查找子窗口,我们不使用 FindWindow,而是使用 FindWindowEx。“打开”、“保存”和“取消”三个按钮都具有相同的类,即“按钮”。

于 2012-05-01T16:37:26.847 回答
1

类似帖子:链接

    Option Explicit
    Dim ie As InternetExplorer
    Dim h As LongPtr
    Private Declare PtrSafe Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As LongPtr, ByVal hWnd2 As LongPtr, ByVal lpsz1 As String, ByVal lpsz2 As String) As LongPtr

Sub Download()
    Dim o As IUIAutomation
    Dim e As IUIAutomationElement
    Set o = New CUIAutomation
    h = ie.Hwnd
    h = FindWindowEx(h, 0, "Frame Notification Bar", vbNullString)
    If h = 0 Then Exit Sub

    Set e = o.ElementFromHandle(ByVal h)
    Dim iCnd As IUIAutomationCondition
    Set iCnd = o.CreatePropertyCondition(UIA_NamePropertyId, "Open")

    Dim Button As IUIAutomationElement
    Set Button = e.FindFirst(TreeScope_Subtree, iCnd)
    Dim InvokePattern As IUIAutomationInvokePattern
    Set InvokePattern = Button.GetCurrentPattern(UIA_InvokePatternId)
    InvokePattern.Invoke
End Sub 
于 2015-10-25T04:50:42.883 回答
1

我将快捷键发送到应用程序。在这里,它们适用于 IE11。抱歉,我无法在 IE9 中进行测试。如果您按住Alt,它可能会像 IE11 一样向您显示组合的另一个键。

注意:如果 IE 不是您机器上的活动窗口,则代码将不会按您的预期运行,因此它在调试模式下将无法工作。

  • 快捷键:Alt+O
  • VBA:Application.SendKeys "%{O}"
于 2016-10-12T22:16:24.380 回答