gpt4 book ai didi

vba - 从 VBA (Excel) 中的异步文件下载

转载 作者:行者123 更新时间:2023-12-04 09:42:33 25 4
gpt4 key购买 nike

我已经尝试过对此使用许多不同的技术...一种运行良好但在运行时仍会占用代码的方法是使用 api 调用:

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


IF URLDownloadToFile(0, "URL", "FilePath", 0, 0) Then
End If

我还使用(成功)代码从 Excel 中编写 vbscript,然后使用它运行 wscript 并等待回调。但这又不是完全异步的,仍然会占用一些代码。

我希望在事件驱动的类中下载文件,并且 VBA 代码可以使用“DoEvents”在一个大循环中执行其他操作。当一个文件完成时,它可以触发一个标志,代码可以在等待另一个文件的同时处理该文件。

这是从 Intranet 站点中提取 excel 文件。如果这有帮助。

因为我确定有人会问,所以我只能使用 VBA。这将在工作场所使用,并且 90% 的计算机是共享的。我非常怀疑他们是否会因为获得 Visual Studio 的商业费用而跃跃欲试。所以我必须使用我所拥有的。

任何帮助将不胜感激。

最佳答案

您可以在异步模式下使用 xmlhttp 和一个类来处理其事件:

http://www.dailydoseofexcel.com/archives/2006/10/09/async-xmlhttp-calls/

那里的代码解决了 responseText,但您可以调整它以使用 .responseBody。这是一个(同步)示例:

Sub FetchFile(sURL As String, sPath)
Dim oXHTTP As Object
Dim oStream As Object


Set oXHTTP = CreateObject("MSXML2.XMLHTTP")
Set oStream = CreateObject("ADODB.Stream")
Application.StatusBar = "Fetching " & sURL & " as " & sPath
oXHTTP.Open "GET", sURL, False
oXHTTP.send
With oStream
.Type = 1 'adTypeBinary
.Open
.Write oXHTTP.responseBody
.SaveToFile sPath, 2 'adSaveCreateOverWrite
.Close
End With
Set oXHTTP = Nothing
Set oStream = Nothing
Application.StatusBar = False


End Sub

关于vba - 从 VBA (Excel) 中的异步文件下载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7747877/

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