Управление IE11 «Хотите открыть / сохранить» VBA - PullRequest
0 голосов
/ 04 июля 2019

У меня проблемы с кодом, который я пишу на VBA.Я в основном использую vba для открытия веб-сайта, ввода информации, а затем нажимаю кнопку загрузки, которая загружает CSV-файл, который я могу затем скопировать и вставить в файл Excel.Мне удается все сделать до нажатия кнопки загрузки.Когда я это делаю, в IE11 появляется диалоговое окно с вопросом, хочу ли я сохранить или открыть файл.Я понятия не имею, как решить эту проблему и как открыть или сохранить.Я перепробовал все, что упомянуто в решении для той же проблемы в Управление IE11 кнопками диалогового окна «Вы хотите открыть / сохранить» в VBA , но даже если я использую это решение, код работает, но просто делаетничего не делать.

Я пытался использовать UIAutomation, но безуспешно.Я использовал решение, предоставленное в Управление IE11 Кнопками диалогового окна «Хотите открыть / сохранить» в 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

1 Ответ

0 голосов
/ 05 июля 2019

Возможный дубликат взаимодействия VBA с 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...