2013-03-26 2 views
2

Я начинаю работать в VBA. Как загрузить PDF-файл с помощью UrlDownloadToFile от http://cetatenie.just.ro/wp-content/uploads/?Загрузить файлы (PDF) из Интернета

Может ли кто-нибудь помочь в этом? Код ищет гиперссылки гиперссылок PDF-файлов PDF и сопоставляет их по некоторым критериям, то есть текущий год под их именем.

Function UrlDownloadToFile(lNum As Long, sUrl As String, sPath As String, _ 
          lNum1 As Long, lNum2 As Long) As Long 

    UrlDownloadToFile = 0 

    End Function 

Sub DownPDF() 
    ' This macro downloads the pdf file from webpage 
    ' Need to download MSXML2 and MSHTML parsers and install 

    Dim sUrl As String 
    Dim xHttp As MSXML2.XMLHTTP 
    Dim hDoc As MSHTML.HTMLDocument 
    Dim hAnchor As MSHTML.HTMLAnchorElement 
    Dim Ret As Long 
    Dim sPath As String 
    Dim i As Long 

    sPath = "C:\Documents and Settings\ee28118\Desktop\" 
    sUrl = "http://cetatenie.just.ro/wp-content/uploads/" 

    'Get the directory listing 
    Set xHttp = New MSXML2.XMLHTTP 
    xHttp.Open "GET", sUrl 
    xHttp.send 

    'Wait for the page to load 
    Do Until xHttp.readyState = 4 
     DoEvents 
    Loop 

    'Put the page in an HTML document 
    Set hDoc = New MSHTML.HTMLDocument 
    hDoc.body.innerHTML = xHttp.responseText 

    'Loop through the hyperlinks on the directory listing 
    For i = 0 To hDoc.getElementsByTagName("a").Length - 1 
     Set hAnchor = hDoc.getElementsByTagName("a").Item(i) 

     'test the pathname to see if it matches your pattern 
     If hAnchor.pathname Like "Ordin-*.2013.pdf" Then 
      Ret = UrlDownloadToFile(0, sUrl & hAnchor.pathname, sPath, 0, 0) 

      If Ret = 0 Then 
       Debug.Print sUrl & hAnchor.pathname & " downloaded to " & sPath 
      Else 
       Debug.Print sUrl & hAnchor.pathname & " not downloaded" 
      End If 
     End If 
    Next i 

    End Sub 
+0

UrlDownloadtoFile - это функция Win API: http://www.vbaexpress.com/forum/showthread.php?t=33145 Вам нужно вызвать это вместо рекурсивного вызова функции, которую вы опубликовали. –

ответ

2

К сожалению - я должен был догадаться, что URLDownloadToFile был вызов API и мог ответить на все вопросы в SQL "%" equivalent in VBA.

Удалите функцию с именем URLDownloadToFile полностью. Вставить это в верхней части модуля, в котором ваша процедура Образец

Private Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" _ 
    (ByVal pCaller As Long, _ 
    ByVal szURL As String, _ 
    ByVal szFileName As String, _ 
    ByVal dwReserved As Long, _ 
    ByVal lpfnCB As Long) As Long 

Теперь изменим эту одну строчку в образце, чтобы посмотреть, как этот

Ret = URLDownloadToFile(0, sUrl & hAnchor.pathname, sPath & hAnchor.pathname, 0, 0) 

Тогда вы должны быть хорошо идти. Если вам нужно другое имя файла, вам придется закодировать некоторую логику, чтобы изменить ее на каждой итерации.

+0

Amazing !!! Everyting отлично, на самом деле отлично, спасибо за всю помощь на протяжении всего пути! – maximladus