gpt4 book ai didi

excel - 循环中的 URLDownloadToFile 函数不起作用,因为即使没有要下载的文件,该函数也会返回 0

转载 作者:行者123 更新时间:2023-12-04 20:18:11 27 4
gpt4 key购买 nike

我正在为自己制作一张 Excel 表格来跟踪我的投资。我有这个证券交易所网站的链接,该链接有一个 zip 文件,其中包含最后交易日交易数据的 CSV 文件。 zip 文件的名称是动态的,格式为“eq_csv.zip,其中 ddmmyy 是数据所属的交易日的日期。因此,如果市场关闭。

我建立了一个模块,每次打开我的 excel 文件以获取最新的在线数据时在线检查。下面给出的代码应该从当前日期开始循环并向后移动 1 天,直到我下载了有效的 zip 文件。例如,如果当前日期是 4 月 28 日(星期日)并且在线资源上的文件是 4 月 26 日(星期五)(eq260413_CSV.zip),那么我的循环应该经过 3 次迭代(2 次没有文件消息和一个文件下载的消息)并下载文件 eq260413_CSV.zip。由于提到的在线链接中不存在文件 eq280413_CSV.zip 或 eq290413_CSV.zip,我预计会返回错误并继续循环。而在运行代码时,我发现该函数只是在第一次传递期间创建了一个没有数据的虚拟文件 eq280413_CSV.zip,并向 iRet 返回值 0,从而退出循环。任何人都可以帮忙/投一些光吗

Sub DownloadFile()

Worksheets("Online Equity Data").Activate

Dim StrURL As String
Dim strPath As String
Dim dDate As Date
Dim iRet As Long

dDate = Now() + 1
iRet = 1
vFolderName = "C:\Users\Deep\Documents\Finances\Test\"

Do While iRet <> 0
dDate = dDate - 1
StrURL = "http://www.bseindia.com/download/BhavCopy/Equity/eq" & Format(dDate, "ddmmyy") & "_csv.zip"
strPath = vFolderName & "eq" & Format(dDate, "ddmmyy") & "_csv.zip"
iRet = URLDownloadToFile(0, StrURL, strPath, 0, 0)
If iRet= 0
MsgBox "File eq" & Format(dDate, "ddmmyy") & "_csv.zip Downloaded"
Else
MsgBox "No File Named eq" & Format(dDate, "ddmmyy") & "_csv.zip"
End If
Loop

'More code Here to unzip and import the downloaded data

End Sub()

最佳答案

URLDownloadToFile当文件/URL 不存在时,不应使用文件 API。

您必须首先检查 URL 是否有效,然后使用 URLDownloadToFile如果适用。

使用 Leith Ross 编写的以下函数(取自 HERE)

'Written: March 15, 2011
'Author: Leith Ross

Public PageSource As String
Public httpRequest As Object

Function GetURLStatus(ByVal URL As String, Optional AllowRedirects As Boolean)
Const WinHttpRequestOption_UserAgentString = 0
Const WinHttpRequestOption_EnableRedirects = 6

On Error Resume Next
Set httpRequest = CreateObject("WinHttp.WinHttpRequest.5.1")
If httpRequest Is Nothing Then
Set httpRequest = CreateObject("WinHttp.WinHttpRequest.5")
End If
Err.Clear
On Error GoTo 0

httpRequest.Option(WinHttpRequestOption_UserAgentString) = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)"
httpRequest.Option(WinHttpRequestOption_EnableRedirects) = AllowRedirects

'Clear any pervious web page source information
PageSource = ""

'Add protocol if missing
If InStr(1, URL, "://") = 0 Then
URL = "http://" & URL
End If

'Launch the HTTP httpRequest synchronously
On Error Resume Next
httpRequest.Open "GET", URL, False
If Err.Number <> 0 Then
'Handle connection errors
GetURLStatus = Err.Description
Err.Clear
Exit Function
End If
On Error GoTo 0

'Send the http httpRequest for server status
On Error Resume Next
httpRequest.Send
httpRequest.WaitForResponse
If Err.Number <> 0 Then
' Handle server errors
PageSource = "Error"
GetURLStatus = Err.Description
Err.Clear
Else
'Show HTTP response info
GetURLStatus = httpRequest.Status & " - " & httpRequest.StatusText
'Save the web page text
PageSource = httpRequest.responsetext
End If
On Error GoTo 0
End Function

当 URL 正常时,你会得到类似这样的东西

enter image description here

如果不是,你会得到这样的东西

enter image description here

所以你需要做的就是寻找 200 - OK如果你明白了,那么使用 URLDownloadToFile下载文件。

关于excel - 循环中的 URLDownloadToFile 函数不起作用,因为即使没有要下载的文件,该函数也会返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16289238/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com