Управление IE диалоговым окном «Сохранить вывод как» в VBA - PullRequest
0 голосов
/ 28 января 2019

Я автоматизирую Internet Explorer, чтобы распечатать веб-страницу в PDF и сохранить ее на рабочем столе с помощью VBA.Как управлять с помощью диалогового окна «Сохранить вывод на печать как» в VBA?Я бы предпочел решение без Application.SendKeys.

Задача состоит в том, чтобы программно перехватить этот диалог, изменить «Имя файла:» (путь + имя файла).При желании я также хотел бы: Изменить «Сохранить как тип:».Нажмите «Сохранить».

У меня есть рабочее решение с диалоговым окном «Сохранить как», но для «Сохранить вывод на печать как» оно не работает.

1 Ответ

0 голосов
/ 28 января 2019

Option Explicit</p> <p>Declare PtrSafe Function SendMessageW Lib "User32" (ByVal hWnd As LongPtr, ByVal wMsg As LongPtr, ByVal wParam As LongPtr, ByVal lParam As LongPtr) As LongPtr Declare PtrSafe Function FindWindowExW Lib "User32" (ByVal hWndParent As LongPtr, Optional ByVal hwndChildAfter As LongPtr, Optional ByVal lpszClass As LongPtr, Optional ByVal lpszWindow As LongPtr) As LongPtr Public Declare PtrSafe Function FindWindowW Lib "User32" (ByVal lpClassName As LongPtr, Optional ByVal lpWindowName As LongPtr) As LongPtr</p> <p>Public Const WM_SETTEXT = &HC Public Const BM_CLICK = &HF5</p> <p>Public Sub GetInfo() Const MAX_WAIT_SEC As Long = 5 Dim t As Date Dim ptrSaveButton As LongPtr Dim msg As String Dim str1 As String, cls As String, name As String Dim ptrSaveWindow As LongPtr Dim duiViewWND As LongPtr, directUIHWND As LongPtr Dim floatNotifySinkHWND As LongPtr, comboBoxHWND As LongPtr, editHWND As LongPtr</p> <pre><code> str1 = "#32770" & vbNullChar t = Timer Do DoEvents ptrSaveWindow = FindWindowW(StrPtr(str1)) If Timer - t > MAX_WAIT_SEC Then Exit Do Loop While ptrSaveWindow = 0 If Not ptrSaveWindow > 0 Then Exit Sub duiViewWND = FindWindowExW(ptrSaveWindow, 0&) If Not duiViewWND > 0 Then Exit Sub directUIHWND = FindWindowExW(duiViewWND, 0&) If Not directUIHWND > 0 Then Exit Sub floatNotifySinkHWND = FindWindowExW(directUIHWND, 0&) If Not floatNotifySinkHWND > 0 Then Exit Sub comboBoxHWND = FindWindowExW(floatNotifySinkHWND, 0&) If Not comboBoxHWND > 0 Then Exit Sub editHWND = FindWindowExW(comboBoxHWND, 0&) If Not editHWND > 0 Then Exit Sub msg = "C:\Users\ID\Desktop\myTest.pdf" & vbNullChar SendMessageW editHWND, WM_SETTEXT, 0, StrPtr(msg) cls = "Button" & vbNullChar name = "&Save" & vbNullChar ptrSaveButton = FindWindowExW(ptrSaveWindow, 0, StrPtr(cls), StrPtr(name)) SendMessageW ptrSaveButton, BM_CLICK, 0, 0 Application.Wait Now + TimeSerial(0, 0, 4)

End Sub

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...