2014-01-29 38 views
0

我有它的目的是从网上下载文件,给我一个消息,“从......下载数据”,并尽快下载给我留言以下VBA代码“下载到...“。这里是我的代码:消息框并不总是可见

Sub DownloadFileFromWeb() 
Dim IE As Object 
Dim links As Variant, lnk As Variant 
Dim download_path As String 
download_path = "\\xxxxx\Save Raw File here.xls" 
Set IE = CreateObject("InternetExplorer.Application") 
IE.Navigate "http://www.hkma.gov.hk/eng/market-data-and-statistics/monthly-statistical-bulletin/table.shtml#section2" 'load web page 
While IE.Busy 
    DoEvents 'wait until IE is done loading page. 
Wend 
Set links = IE.document.getElementsByTagName("a") 
For Each lnk In links 
    If Len(lnk.href) > 4 And Right(lnk.href, 4) = ".xls" And InStr(1, lnk.href, "http://www.hkma.gov.hk/media/eng/doc/market-data-and-statistics/monthly-statistical-bulletin/T080102.xls") <> 0 Then 
      MsgBox "Downloading Data from " & lnk.href 
      Download_File lnk.href, download_path 
      MsgBox "Downloaded to - " & download_path 
      Exit For 
    End If 
Next 
End Sub 

Function Download_File(ByVal vWebFile As String, ByVal vLocalFile As String) As Boolean 
Dim oXMLHTTP As Object, i As Long, vFF As Long, oResp() As Byte 

Set oXMLHTTP = CreateObject("MSXML2.XMLHTTP") 
oXMLHTTP.Open "GET", vWebFile, False 'Open socket to get the website 
oXMLHTTP.Send 'send request 

'Wait for request to finish 
Do While oXMLHTTP.readyState <> 4 
DoEvents 
Loop 

oResp = oXMLHTTP.responseBody 'Returns the results as a byte array 

'Create local file and save results to it 
vFF = FreeFile 
If Dir(vLocalFile) <> "" Then Kill vLocalFile 
Open vLocalFile For Binary As #vFF 
Put #vFF, , oResp 
Close #vFF 

'Clear memory 
Set oXMLHTTP = Nothing 
End Function 

我有这个一个问题是,大部分的时间我不会得到任何消息框出现,并没有得到在此期间下载。你能帮我一直拿到信箱吗?

非常感谢!

+0

我不知道为公司的目录整个路径是否是一个明智的选择。不是我们可以访问它,而是......无论如何。有两件事:你的'download_path'是错误的。你应该停止在文件夹级别,除非你的'Download_File'子程序/函数将'download_path'作为下载文件的最终保存名称。其次,'InStr'正在过度使用。你确定你下载的文件是**总是**名为'T080102.xls'吗?请澄清一下,并提供'Download_File'的代码。我认为它有时会成功,但有些东西阻碍了它。 – Manhattan

+0

非常感谢,也删除了公司目录:)是的,该文件将永远被命名为T080102.xls。有时它是成功的,有时也不是哪个是令人讨厌的部分也是正确的!下面是Download_File以及 – user3249608

+0

功能Download_File(BYVAL vWebFile作为字符串,BYVAL vLocalFile作为字符串)为布尔 昏暗oXMLHTTP作为对象,我长,VFF长,oResp()作为字节 集oXMLHTTP =的CreateObject(” MSXML2.XMLHTTP“) oXMLHTTP.Open ”GET“,vWebFile,假 '打开插座,以获得网站 oXMLHTTP.Send' 发送请求 “等待请求的完成 做,当oXMLHTTP.readyState <> 4周 的DoEvents Loop oResp = oXMLHTTP.responseBody'将结果作为字节数组返回 – user3249608

回答

0

在我的端测试了你的代码,我看不到任何错误。我已经下载了一百次,并且没有中断。不过,我做了一些小修改。

你的主要子程序更改为以下:

Sub DownloadFileFromWeb() 
Dim IE As Object 
Dim links As Variant, lnk As Variant 
Dim download_path As String 
download_path = "C:\...\SavedFile.xls" 'Modify. 
Set IE = CreateObject("InternetExplorer.Application") 
IE.Navigate "http://www.hkma.gov.hk/eng/market-data-and-statistics/monthly-statistical-bulletin/table.shtml#section8" 'load web page 
While IE.Busy 
    DoEvents 'wait until IE is done loading page. 
Wend 
Set links = IE.document.getElementsByTagName("a") 
For Each lnk In links 
    If Len(lnk.href) > 4 And Right(lnk.href, 4) = ".xls" And InStr(1, lnk.href, "T080102.xls") <> 0 Then 
      If MsgBox("Downloading Data from " & lnk.href, vbOKOnly) = vbOK Then 
       Download_File lnk.href, download_path 
       MsgBox "Downloaded to - " & download_path 
       Exit For 
      End If 
    End If 
Next 
End Sub 

基本上,我只是改变了一两件事:消息框将等待您输入它下载的文件之前。请注意我是如何做到的If MsgBox(...) = vbOKOnly。这样,它会等待你的输入而不会中断。

对网址进行细微更改。将section2更改为section8,因为这是你想要的表格(不会影响任何东西,恕我直言)。

让我们知道这是否有帮助。

+0

非常感谢。它似乎现在工作正常:) – user3249608