0
votes

I'm going to have multiple instrument numbers and URLs to run this code through. The instrument numbers will start in Column B from Row 8 and down. This VBA currently only runs instrument number 19930074944. How can I have it loop through all these instrument numbers and skip blank cells?

searchResultsURL = baseURL & "GetRecDataDetail.aspx?rec=19930074944&suf=&bdt=1/1/1947&edt=11/18/2016&nm=&doc1=&doc2=&doc3=&doc4=&doc5="

So I need to edit it so that it's:

searchResultsURL = baseURL & "GetRecDataDetail.aspx?rec= & InstNum & "&suf=&bdt=1/1/1947&edt=11/18/2016&nm=&doc1=&doc2=&doc3=&doc4=&doc5="

Then InstNum has to reference B8 and down. And run all this code on each different URL. I have no idea how to do that. Thanks so much!

Option Explicit

Public Sub Download_PDF()

Dim baseURL As String, searchResultsURL As String, pdfURL As String,    PDFdownloadURL As String
Dim httpReq As Object
Dim HTMLdoc As Object
Dim PDFlink As Object
Dim cookie As String
Dim downloadFolder As String, localFile As String

Const WinHttpRequestOption_EnableRedirects = 6

'Folder in which the downloaded file will be saved

downloadFolder = ThisWorkbook.Path
If Right(downloadFolder, 1) <> "\" Then downloadFolder = downloadFolder & "\"

baseURL = "http://recorder.maricopa.gov/recdocdata/"
searchResultsURL = baseURL & "GetRecDataDetail.aspx?       rec=19930074944&suf=&bdt=1/1/1947&edt=11/18/2016&nm=&doc1=&doc2=&doc3=&doc4=&doc5="

Set httpReq = CreateObject("WinHttp.WinHttpRequest.5.1")

With httpReq

'Send GET to request search results page

.Open "GET", searchResultsURL, False
.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0"
.Send
cookie = .getResponseHeader("Set-Cookie")

'Put response in HTMLDocument for parsing
Set HTMLdoc = CreateObject("HTMLfile")
HTMLdoc.body.innerHTML = .responseText

'Get PDF URL from pages link
'< a id="ctl00_ContentPlaceHolder1_lnkPages" title="Click to view unofficial   document"
' href="unofficialpdfdocs.aspx?rec=19930074944&pg=1&cls=RecorderDocuments&suf="  target="_blank">11< /a>

Set PDFlink = HTMLdoc.getElementById("ctl00_ContentPlaceHolder1_lnkPages")
pdfURL = Replace(PDFlink.href, "about:", baseURL)
'Send GET request to the PDF URL with automatic http redirects disabled.         This returns a http 302 status (Found) with the Location header containing the URL of the PDF file

.Open "GET", pdfURL, False
.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0)  Gecko/20100101 Firefox/46.0"
.setRequestHeader "Referer", searchResultsURL
.setRequestHeader "Set-Cookie", cookie
.Option(WinHttpRequestOption_EnableRedirects) = False
.Send
PDFdownloadURL = .getResponseHeader("Location")

'Send GET to request the PDF file download

.Open "GET", PDFdownloadURL, False
.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:47.0) Gecko/20100101 Firefox/46.0"
.setRequestHeader "Referer", pdfURL
.Send

End With
End Sub
2

2 Answers

0
votes

Something like this:

Sub DoAll()
    Dim c As Range
    Set c = Activesheet.Range("B8")
    Do While c.Value<>""

        Download_PDF c.Value

        Set c = c.offset(1,0) 'next value
    Loop
End sub

Edit your original code to include a parameter (relevant parts shown only)

Public Sub Download_PDF(InsNumber)
'....
'....
searchResultsURL = baseURL & "GetRecDataDetail.aspx?rec=" & InsNumber & _
       "&suf=&bdt=1/1/1947&edt=11/18/2016&nm=&doc1=&doc2=&doc3=&doc4=&doc5="

'....
'....
End Sub
0
votes

Hi The below code should work for you..Looping through all the elements.. Note: change sheet1 to required sheet.Pls mark as answer.

        Option Explicit

        Public Sub Download_PDF()

        Dim baseURL As String, searchResultsURL As String, pdfURL As String, PDFdownloadURL As String
        Dim httpReq As Object
        Dim HTMLdoc As Object
        Dim PDFlink As Object
        Dim cookie As String
        Dim downloadFolder As String, localFile As String

        Const WinHttpRequestOption_EnableRedirects = 6

        'Folder in which the downloaded file will be saved

        downloadFolder = ThisWorkbook.Path
        If Right(downloadFolder, 1) <> "\" Then downloadFolder = downloadFolder & "\"

        baseURL = "http://recorder.maricopa.gov/recdocdata/"


        Set httpReq = CreateObject("WinHttp.WinHttpRequest.5.1")
        Dim Instnum As String
        Dim i As Integer
        For i = 8 To Sheet1.Range("b" & Rows.Count).End(xlUp).Row

        Instnum = Sheet1.Cells(i, 2).Value
        searchResultsURL = baseURL & "GetRecDataDetail.aspx?       rec=" & Instnum & "&suf=&bdt=1/1/1947&edt=11/18/2016&nm=&doc1=&doc2=&doc3=&doc4=&doc5="
        With httpReq

        'Send GET to request search results page

        .Open "GET", searchResultsURL, False
        .setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0"
        .Send
        cookie = .getResponseHeader("Set-Cookie")

        'Put response in HTMLDocument for parsing
        Set HTMLdoc = CreateObject("HTMLfile")
        HTMLdoc.body.innerHTML = .responseText

        'Get PDF URL from pages link
        '< a id="ctl00_ContentPlaceHolder1_lnkPages" title="Click to view unofficial   document"
        ' href="unofficialpdfdocs.aspx?rec=19930074944&pg=1&cls=RecorderDocuments&suf="  target="_blank">11< /a>

        Set PDFlink = HTMLdoc.getElementById("ctl00_ContentPlaceHolder1_lnkPages")
        pdfURL = Replace(PDFlink.href, "about:", baseURL)
        'Send GET request to the PDF URL with automatic http redirects disabled.         This returns a http 302 status (Found) with the Location header containing the URL of the PDF file

        .Open "GET", pdfURL, False
        .setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0)  Gecko/20100101 Firefox/46.0"
        .setRequestHeader "Referer", searchResultsURL
        .setRequestHeader "Set-Cookie", cookie
        .Option(WinHttpRequestOption_EnableRedirects) = False
        .Send
        PDFdownloadURL = .getResponseHeader("Location")

        'Send GET to request the PDF file download

        .Open "GET", PDFdownloadURL, False
        .setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:47.0) Gecko/20100101 Firefox/46.0"
        .setRequestHeader "Referer", pdfURL
        .Send

        End With
        Next i
        End Sub