【问题标题】:Controlling IE11 “Do you want to Open/Save” VBA控制 IE11 “你想打开/保存” VBA
【发布时间】:2019-07-04 19:03:10
【问题描述】:

我在 VBA 上编写的代码有问题。我基本上是使用 vba 打开一个网站,输入信息,然后单击一个下载按钮,它会下载一个 csv,然后我可以将其复制并放入我的 excel 文件中。在单击下载按钮之前,我确实设法完成了所有工作。当我这样做时,IE11 会出现一个对话窗口,询问我是要保存还是打开文件。我不知道如何解决这个问题以及如何单击打开或保存。我已经尝试了 Controlling IE11 "Do you want to Open/Save" dialogue window buttons in VBA 中针对同一问题的解决方案中提到的所有内容,但即使我使用此解决方案,代码也会运行,但什么也没做。

我曾尝试使用 UIAutomation,但没有成功。我使用了Controlling IE11 "Do you want to Open/Save" dialogue window buttons in VBA 中提供的解决方案。我也尝试过使用 Sendkeys,但我不完全确定如何将焦点设置在 Internet Explorer 上,以便 sendkeys 做它们应该做的事情。

代码其实很简单

Sub GetHTMLDocument()

Dim ie As New SHDocVw.InternetExplorer
Dim HTMLDoc As HTMLDocument
Dim HTMLInput As MSHTML.IHTMLElement
Dim HTMLButtons As MSHTML.IHTMLElementCollection
Dim HTMLButton As MSHTML.IHTMLElement


ie.Visible = True
ie.Navigate "this is where i put the website"

Do While ie.ReadyState <> READYSTATE_COMPLETE
Loop

Set HTMLDoc = ie.Document
Set HTMLInput = HTMLDoc.getElementById("Search")
HTMLInput.Value = "Hello"
Set HTMLInput = HTMLDoc.getElementById("downloadCSV")
HTMLInput.Click


End Sub

不幸的是,我无法提供网站,也无法使用公共网站,之后我收到消息是在 Internet Explorer 上打开还是保存它

【问题讨论】:

  • 公开网址?
  • 要使用 url,你需要一个 vpn 访问权限,所以我无法发送 url,我知道这会使事情复杂化
  • 你能找到一个不同的网站,你的代码的基本结构会重现问题吗?此外,包括您当前的最佳编码尝试将有助于避免任何反对意见,因为为什么我的代码工作问题通常不需要包含代码。很明显你已经做了研究。
  • 我已经编辑了帖子
  • 有人可能应该关闭它并标记为stackoverflow.com/questions/11652890/…的重复项

标签: vba


【解决方案1】:

VBA interaction with internet explorer 可能重复

尽管对于这个特定问题,这个答案可能更清楚。

1) 将此添加到模块顶部 - 它创建一个函数,允许您为任何窗口提供焦点。我不知道细节。

Public Declare Function SetForegroundWindow Lib "user32" (ByVal HWND As Long) As Long

2) 修改此代码以品尝以便使用 SendKeys

        'give IE focus to prepare for SendKeys
            ' IE.HWND = the handle of the Windows Internet Explorer main window.
                Dim HWNDSrc As Long
                HWNDSrc = IE.HWND
                SetForegroundWindow HWNDSrc

        'Make sure IE is not busy
            Do While IE.Busy
                Application.Wait DateAdd("s", 1, Now)
            Loop

        'send Alt-S to save
            Application.SendKeys "%{S}"

        'Make sure IE is not busy
             Do While IE.Busy
                 Application.Wait DateAdd("s", 1, Now)
             Loop

【讨论】:

  • 我会试一试并更新它是否对我有用。不过,我确实提前感谢您
  • 非常感谢,这行得通,这是唯一对我有用的解决方案,非常感谢您的帮助。
  • 不客气。我只是为我在这里获得的所有帮助而付出代价。我建议你无论是在这里还是现实生活中都这样做,你会感谢自己这样做;-)
猜你喜欢
  • 2015-11-15
  • 1970-01-01
  • 1970-01-01
  • 2019-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 2014-04-20
相关资源
最近更新 更多