Excel VBA将网页打印或另存为PDF



目前,我在Excel工作表的C列中有一个URL列表。我有一段代码可以循环浏览所有的URL,并在Internet Explorer中打开它们。一旦加载,它将在同一浏览器中打开下一个,依此类推

我缺少的是在转到下一个URL之前将页面打印为PDF或另存为PDF。PDF文件名将是B列中相应单元格的内容。

我是打印网页的新手,所以我一直在尝试几种不同的方法。最常见的方法是使用.ExecWB OLECMDID_PRINT命令。问题是,它从来没有为我做任何事情。它只是在没有保存或打印网页的情况下移动到下一个URL。

我引用了许多stackoverflow的帖子,这里有几个可以命名:

VBA在IE11 的"打印预览"窗口中单击

在不使用SendKeys 的情况下自动执行IE打印对话框

绕过IE9 中的打印对话框

这是我的代码:

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吗?我不确定我在这段代码中遗漏了什么或做错了什么。我甚至还没有尝试指定保存位置或保存名称,因为我第一次尝试以任何方式打印它。

非常感谢!

您的代码有一些不同的问题。你应该做的第一件事是让它正确地在单元格范围内循环(你的单元格什么都不返回。(

Option Explicit
Sub LoopURL()
Dim ws As Worksheet, urls As Range, url, lastRow As Long, ie
Set ws = Sheets("Sheet1")
Set ie = New InternetExplorer
With ie
lastRow = ws.Cells(ws.Rows.Count, "C").End(xlUp).Row
Set urls = ws.Range("C1:C" & lastRow)
For Each url In urls.Cells
Debug.Print "Loading: ", url
ie.Navigate url
Do While .Busy Or .readyState <> 4: DoEvents: Loop
'print your page here...
'wait for page to print...
Next url
.Quit
Set ie = Nothing
End With
End Sub

然后您可以添加实际打印所需的代码,您可以在以下几个答案中找到:使用VBA将Wesite打印为PDF

我也不知道为什么你认为有必要禁用事件、屏幕更新和计算。。。但一般来说,所有这些类型的设置都可以是原样的,尤其是在排除问题时。