当前,我在Excel工作表的C列中有一个URL列表。我有将遍历所有URL并在Internet Explorer中打开它们的代码。加载后,它将在同一浏览器中打开下一个,依此类推。
我所缺少的是在继续下一个URL之前将页面打印为PDF或SaveAs 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吗?我不确定这段代码中我缺少什么或做错了什么。我什至还没有尝试指定保存位置或保存名称,因为我第一次尝试以任何方式打印它。
非常感谢!
答案 0 :(得分:0)
您的代码有几个不同的问题。您应该做的第一件事是让它正确遍历整个单元格范围(您什么也不会返回。)
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
然后,您可以添加实际打印所需的代码,您可以在几个答案中找到该代码,例如:Print Wesite to PDF using VBA。
我也不确定为什么您认为有必要禁用事件,屏幕更新和计算...但是,通常所有这些设置都可以保持原样,尤其是在解决问题时。