2014-01-29 104 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