【发布时间】:2018-07-10 19:27:31
【问题描述】:
目前,我在 Excel 工作表的 C 列中有一个 URL 列表。我的代码将遍历所有 URL 并在 Internet Explorer 中打开它们。加载后,它将在同一浏览器中打开下一个,依此类推。
我缺少的是在转到下一个 URL 之前将页面打印为 PDF 或另存为 PDF。 PDF 文件名将是 B 列中相应单元格的内容。
我是打印网页的新手,所以我一直在尝试几种不同的方法。最常见的方法是使用.ExecWB OLECMDID_PRINT 命令。问题是,它从来没有为我做任何事情。它只是移动到下一个 URL 而不保存或打印网页。
我参考了很多 stackoverflow 的帖子,这里有一些可以命名:
VBA to click within Print Preview window in IE11
Automate IE print dialog box without using SendKeys
这是我的代码:
Option Explicit
Const OLECMDID_PRINT = 6
Const OLECMDEXECOPT_PROMPTUSER = 1
Const OLECMDEXECOPT_DONTPROMPTUSER = 2
Const PRINT_WAITFORCOMPLETION = 2
Const OLECMDID_SAVEAS = 4
Sub OpenURL_Print()
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Application.EnableEvents = True
Dim wb As Workbook
Dim wsSheet As Worksheet, Rows As Long, links As Variant, IE As Object, link As Variant
Set wb = ThisWorkbook
Set wsSheet = wb.Sheets("Sheet1")
Set IE = New InternetExplorerMedium
Rows = wsSheet.Cells(wsSheet.Rows.Count, "C").End(xlUp).Row
links = wsSheet.Range("C1:C" & Rows)
With IE
.Visible = True
For Each link In links
.Navigate (link)
While .Busy Or .ReadyState <> 4: DoEvents: Wend
IE.ExecWB OLECMDID_SAVEAS, OLECMDEXECOPT_DONTPROMPTUSER
Next link
End With
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
在转到下一个 URL 之前,有人可以帮助我将页面打印为 PDF 吗?我不确定我在这段代码中遗漏了什么或做错了什么。我什至还没有尝试指定保存位置或保存名称,因为我第一次尝试以任何方式打印它。
非常感谢!
【问题讨论】:
-
@QHarr 感谢您的回复!通过该链接,我看到了它的 PDFCreator,这是一个我无法访问的软件。那里的示例代码是否仍然适用于“Microsoft Print to PDF”甚至“CutePDF Writer”?
-
在 SO 上有许多用于此任务的示例打印功能。有些地方你可以改变论点,但恐怕我还没有测试过。