linke95
linke95

Reputation: 31

Print Wesite to PDF using VBA

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

Answers (2)

linke95
linke95

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

jsotola
jsotola

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

Related Questions