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

Vba 从网站/网页下载/保存文件,vba,excel,Vba,Excel,我需要从下面的链接下载第一个/前5个日期的PDF文件,并将其保存在桌面上。我不知道如何开始,但也无法在谷歌上找到明确的内容 你认为你能帮我吗 我会使用Internet Explorer,并使用SHDocVw.InternetExplorer对象(VBA引用“Microsoft Internet控件”,ieframe.dll)将其自动化 您可以(a)使用Set x=new SHDocVw.InternetExplorer创建一个新的Internet Explorer窗口,或者(b)使用Set ow

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

你认为你能帮我吗


我会使用Internet Explorer,并使用SHDocVw.InternetExplorer对象(VBA引用“Microsoft Internet控件”,ieframe.dll)将其自动化

您可以(a)使用
Set x=new SHDocVw.InternetExplorer
创建一个新的Internet Explorer窗口,或者(b)使用
Set owins=CreateObject(“Shell.Application”).Windows
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>

您可以从这里开始:好的,基本思想很清楚,有没有可能通过VBA实现这一点?非常感谢。是的,我认为这篇文章:准确地描述了你想要实现的目标。我想说这里是我所需要的,你在这里做了一件了不起的工作,我只是需要一段时间来更好地理解“隔离”和用法。非常感谢你!Laso,忘了告诉你定期更新页面和定期添加其他文件。我假设代码会有一点变化……不会吧?只要您仍然想下载前五个文件,并且HTML仍然遵循相同的模式,那么您就不需要更改代码。代码的一般结构可能会在元素之间循环,并且在识别和下载五个文件后,停止循环。只要网页作者只是使用他/她通常使用的相同模式将新文件添加到列表顶部,那么您的代码就不需要更改。@user2185045 URLDowloadToFile函数正是我所需要的,+1,写得很好,非常感谢。有没有办法保留原始文件名?我从中获取文件的URL是一个PHP脚本,所以我根本不知道文件名,但当我直接从浏览器下载它时,它仍然有一个文件名。@dnLL我不知道你说的是哪个网站,所以我不能确定。我想象有一些安静的重定向魔术正在进行,PHP脚本为浏览器提供一些HTML,并自动重定向到真实文件。URLDownloadToFile()是一个非常方便的函数,但它可能掩盖了这种安静的重定向,这在您的情况下很重要。我不太清楚,但是如果你用URL发布一个问题,这样我就可以玩/测试了,那么我也许可以帮你。
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