Excel IE11帧通知栏保存按钮

Excel IE11帧通知栏保存按钮,excel,vba,internet-explorer,automation,Excel,Vba,Internet Explorer,Automation,在带有MS Excel 2010和IE11的64位系统上,我使用以下代码自动从网站下载过程: hWnd = FindWindowEx(IE.hWnd, 0, "Frame Notification Bar", vbNullString) If hWnd Then hWnd = FindWindowEx(hWnd, 0&, "Button", "Save") End If If hWnd Then SetForegroundWindow (hWnd) Sleep

在带有MS Excel 2010和IE11的64位系统上,我使用以下代码自动从网站下载过程:

hWnd = FindWindowEx(IE.hWnd, 0, "Frame Notification Bar", vbNullString)

If hWnd Then
    hWnd = FindWindowEx(hWnd, 0&, "Button", "Save")
End If

If hWnd Then
    SetForegroundWindow (hWnd)
    Sleep 600
    SendMessage hWnd, BM_CLICK, 0, 0
End If

在框架通知栏出现之前,一切正常。我正在获取此窗口的HWND,但无法获取“保存”按钮的HWND,因此我可以向其发送单击。

我假设您正在谈论IE底部弹出的小框架,它为您提供打开、保存或取消选项。如果是这样的话,你可能想看看另一个类似问题的答案

第二种解决方案可能更复杂(),但仍然有效。你必须从本论坛提供的工作簿中导入模块(虽然你需要注册会员资格,但这是免费的,所以就这么做吧。)这基本上可以满足你的需要,尽管这样可以让你更灵活(选择文件路径、文件名等),而且更复杂一些


不管怎样,希望我能帮忙

如果有人仍在试图找到解决方案,对于IE11来说,它就在这里

在上面代码的第一行,不要使用
“框架通知栏”
获取对话框的确切标题,该标题可能是英文
“查看下载-Internet Explorer”
。这可以让你抓住正确的hWnd

因为在IE11中没有更多的按钮加速器来保存文件,所以请遵循发布的解决方案

从pmr代码中,只需获取以下行:

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

Dim Button As IUIAutomationElement
Set Button = e.FindFirst(TreeScope_Subtree, iCnd)
Dim InvokePattern As IUIAutomationInvokePattern
Set InvokePattern = Button.GetCurrentPattern(UIA_InvokePatternId)
InvokePattern.Invoke

这应该能解决你的问题。这为我打开了法语本地化的局面。

愚蠢的答案是使用sendkeys将Alt+S发送到下载确认,但真正的答案是实现urlddownloadtofile或使用xmlhttp捕获流并保存。我不想使用send Key,因为它们有时似乎有效。我不想展示整个过程和可视性的转变。