从网站/网页下载/保存文件

时间:2013-03-25 12:05:01

标签: vba excel-vba excel

我需要从下面的链接下载第一个/前5个日期的PDF文件,并将它们保存在桌面上。我不知道如何开始,但也无法在Google上找到明确的内容。

你认为你可以帮助我吗?

http://cetatenie.just.ro/ordine/articol-11/

1 个答案:

答案 0 :(得分:2)

我会使用Internet Explorer,并使用SHDocVw.InternetExplorer对象(VBA引用'Microsoft Internet Controls',ieframe.dll)自动执行它。

您可以(a)使用Set x = New SHDocVw.InternetExplorer创建新的Internet Explorer窗口,或者(b)使用Set owins = CreateObject("Shell.Application").Windows获取现有的Internet Explorer窗口(owins是一个数组,循环使用它直到你找到一个Mid(TypeName(owins(i).Document), 1, 12) = "HTMLDocument")。

拥有Internet Explorer ie后,您可以致电ie.Navigate(url)转到网站。

要等待Internet Explorer在查询之前完成导航,您可以运行以下内容:

Do While mascot_win.Busy
    Application.Wait DateAdd("s", 1, Now)
    DoEvents
Loop

要获取该页面上前五个PDF的URL,您需要检查页面的HTML。有两种方法,取决于HTML的格式。如果HTML编写得很好,那么您可以使用ie.Document.all()导航文档对象模型(标记,如XML)。但如果HTML格式不正确,您可能不得不求助于从ie.Document.all(0).innerHTML阅读HTML。

根据您提供的链接外观,您将寻找以下内容:

<li>Data de <strong>22.03.2013</strong>, numarul: <a href="/wp-content/uploads/Ordin-149P-din-22.03.2013.pdf">149P</a></li>

一旦隔离了每个PDF URL(使用DOM模型中的<a>标记的属性或在HTML上使用了大量Mid()次调用),您可以使用以下命令下载:

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

Dim ss As String
Dim ts As String
ss = "http://blah/blah/blah.pdf"
ts = "c:\meh\blah.pdf"
URLDownloadToFile 0, ss, ts, 0, 0