2016-12-01 8 views
-1

非常に大きなファイルをダウンロードするためのコードを記述しようとしていますが、帯域幅によってはダウンロードに30分かかることがあります。私は今、ファイルが完全にダウンロードされる前に終了する非常に基本的なスクリプトを持っています。 readystateなどを使ってVBAでファイル全体をダウンロードしてから移動する方法がありますか?ファイルにダウンロードしてreadystate = 4

Sub Download() 
    Dim strURL As String 
    Dim strPath As String 

    '~~> URL of the Path 
    strURL = "http://www.aeronav.faa.gov/upload_313-/terminal/DDTPPE_201612.zip" 
    '~~> Destination for the file 
    strPath = "c:\Users\username\Desktop\WebTest\database.zip" 

    Ret = URLDownloadToFile(0, strURL, strPath, 0, 0) 

End Sub 

ありがとう:

は、ここでは、コードです!

+0

実際にファイルをダウンロードするコードを表示する必要があるかもしれません..... – Sorceri

+0

...そうですか?この行が実行されると、ファイルがダウンロードされます。Ret = URLDownloadToFile(0、strURL、strPath、0、0) – DakotaKid

+0

私は不思議です - なぜ-1票ですか?私の質問に何か間違っていますか? – DakotaKid

答えて

0

URLをセルに入れて、以下のスクリプトを実行できます。あなたは多くの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 

Sub DownloadFilefromWeb() 
    Dim strSavePath As String 
    Dim URL As String, ext As String 
    Dim buf, ret As Long 
    URL = Worksheets("Sheet1").Range("A2").Value 
    buf = Split(URL, ".") 
    ext = buf(UBound(buf)) 
    strSavePath = "C:\Users\your_path_here\" & "DownloadedFile." & ext 
    ret = URLDownloadToFile(0, URL, strSavePath, 0, 0) 
    If ret = 0 Then 
     MsgBox "Download has been succeed!" 
    Else 
     MsgBox "Error" 
    End If 
End Sub 

enter image description here

。 1つだけダウンロードしたい場合は、この方法で試してください。

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

Sub ExampleDownload() 
Dim IExpl As Object 
Set IExpl = CreateObject("InternetExplorer.Application") 
With IExpl 
.Navigate "http://www.bom.mu/?id=80277" 'You need to change this for a variable and loop 
Do Until .Readystate = 4: Loop ' Allow page to load 
'Code below to find correct href link in page based on text 
For Each lnk In IExpl.Application.Document.Links 
If lnk.outertext = "Click Here to Open or Right Click to Download." Then Exit For 
Debug.Print lnk.outertext 
Next 
End With 
SuccessfulDownload = URLDownloadToFileA(0, lnk.href, "C:\myfilename.zip", 0, 0) 
Set IExpl = Nothing 
End Sub 
+0

@ryguyさん、ありがとうございました。投稿したものとどう違うのですか?ダウンロードを開始するコマンド:ret = URLDownloadToFile ...は同一です。あなたのコードの中でダウンロードを途中で終了させないようにしますか? – DakotaKid

+0

If ret = 0 Then部分を見てください。あなたはそのようにタイムアウトを処理することができます。ダウンロードプロセスを再試行する以外に、ファイルのダウンロードを保証する方法がわかりません。それはかなり大量のファイルでなければなりません! – ryguy7272

+0

ファイルが中断された後、 'If ret = 0 then'部分が実行されるようです。ファイルは約1 GBですが、最速の接続ではありません。 Ryguyの助けてくれてありがとう。 – DakotaKid

0

または、すばやく燃えているRを試してください!ダウンロードして解凍するためにあなたのデータを取得するためには、単にあなたのExcelのツールからCSVを読んで、そして、mode="wb"

download.file("...",temp, mode="wb") 
unzip(temp, "gbr_Country_en_csv_v2.csv") 
dd <- read.table("gbr_Country_en_csv_v2.csv", sep=",",skip=2, header=T) 

を設定する必要があります。

関連する問題