Reputation: 31
I am trying to save HTML as PDF using VBA.
I don't know how to check what is the default printer change it to Microsoft Print to PDF and then back to the old printer.
Below is my code: I search something on Google, then enter the links on the first Google Search page and then I would like to print searches to PDF.
Sub Main()
Dim search As String
Dim save_path As String
Dim number As Integer
number = 5
save_path = ""
Dim query As String
query = InputBox("Enter here your search", "Google Search")
search = query
search = Replace(search, " ", "+")
PDFFolderSelection save_path, search
Debug.Print save_path, search
Google_Search search, save_path, number
End Sub
Sub Google_Search(search As String, save_path As String, number As Integer)
Dim IE As InternetExplorerMedium
Set IE = CreateObject("InternetExplorer.Application")
Dim HTMLDoc As MSHTML.HTMLDocument
IE.Navigate "http://google.com/#q=" & search
IE.Visible = True
Do While IE.ReadyState <> READYSTATE_COMPLETE
Loop
Set HTMLDoc = IE.Document
Dim RCS As MSHTML.IHTMLElementCollection
Dim RC As MSHTML.IHTMLElement
Set RCS = HTMLDoc.getElementsByClassName("rc")
Dim Atags As MSHTML.IHTMLElementCollection
Dim Atag As MSHTML.IHTMLElement
Dim URLs As New Collection
Dim URL As MSHTML.IHTMLElement
Set URLs = Nothing
For Each RC In RCS
Dim RS As MSHTML.IHTMLElementCollection
Dim R As MSHTML.IHTMLElement
Set RS = RC.getElementsByClassName("r")
For Each R In RS
Set Atags = R.getElementsByTagName("a")
For Each Atag In Atags
URLs.Add Atag
Next Atag
Next R
Next RC
For Each URL In URLs
Dim IEs As InternetExplorerMedium
Set IEs = CreateObject("InternetExplorer.Application")
str_text = Replace(URL.getAttribute("href"), "", "")
str_text = Replace(str_text, "", "")
'Debug.Print str_text
IEs.Navigate str_text
IEs.Visible = True
Do While IEs.ReadyState <> READYSTATE_COMPLETE Or IEs.Busy
Loop
IEs.Quit
Set IEs = Nothing
Next URL
IE.Quit
Set IE = Nothing
End Sub
Upvotes: 2
Views: 6462
Reputation: 31
My code looks like this and now i would like to print website to PDF
Dim sPrinter As String
Dim sDefaultPrinter As String
Debug.Print "Default printer: ", Application.ActivePrinter
sDefaultPrinter = Application.ActivePrinter ' store default printer
sPrinter = GetPrinterFullName("Microsoft Print to PDF")
If sPrinter = vbNullString Then ' no match
Debug.Print "No match"
Else
Application.ActivePrinter = sPrinter
Debug.Print "Temp printer: ", Application.ActivePrinter
' do something with the temp printer
' Przechodzenie przez strony wraz z zapisem
For Each URL In URLs
Dim IEs As InternetExplorerMedium
Set IEs = CreateObject("InternetExplorer.Application")
str_text = Replace(URL.getAttribute("href"), "", "")
str_text = Replace(str_text, "", "")
IEs.Navigate str_text
IEs.Visible = True
Do While IEs.ReadyState <> READYSTATE_COMPLETE Or IEs.Busy
Loop
'HERE I WOLULD LIKE TO PRINT IEs TO PDF (specific path, and filename:)
IEs.Quit
Set IEs = Nothing
i = i + 1
If i = 5 Then Exit For
Next URL
Application.ActivePrinter = sDefaultPrinter ' restore default printer
End If
Debug.Print "Default printer: ", Application.ActivePrinter
Upvotes: 1
Reputation: 2278
this took less than 10 minutes to find
just change your default printer
in windows and check the value of Application.ActivePrinter
to get the exact name of the printer that you want to use
there are ways to get a list of system printers by executing system calls.
Option Explicit
Sub switchPrinters()
Dim ptr As String
ptr = Application.ActivePrinter
Application.ActivePrinter = "HP Deskjet 3520 USB on Ne03:" ' "printer_name on port_name"
Activesheet.Printout
Application.ActivePrinter = ptr
End Sub
Upvotes: 0