Не уверен, является ли это стандартной процедурой или нет, но я не хотел чрезмерно загромождать мой вопрос, чтобы люди, читающие его, могли лучше понять его.
Но я нашел альтернативное решение моего вопроса, которое больше соответствует тому, что я первоначально запрашивал. Еще раз спасибо Тиму за то, что он поставил меня на правильный путь, и его использование ADODB.Stream является жизненно важной частью моего решения.
При этом используется Microsoft WinHTTP Services 5.1 .DLL, которая должна быть включена в Windows в той или иной версии, если нет, ее легко загрузить.
Я использую следующий код в классе «HTTPRequest»
Option Explicit
Private WithEvents HTTP As WinHttpRequest
Private ADStream As ADODB.Stream
Private HTTPRequest As Boolean
Private I As Double
Private SaveP As String
Sub Main(ByVal URL As String)
HTTP.Open "GET", URL, True
HTTP.send
End Sub
Private Sub Class_Initialize()
Set HTTP = New WinHttpRequest
Set ADStream = New ADODB.Stream
End Sub
Private Sub HTTP_OnError(ByVal ErrorNumber As Long, ByVal ErrorDescription As String)
Debug.Print ErrorNumber
Debug.Print ErrorDescription
End Sub
Private Sub HTTP_OnResponseFinished()
'Tim's code Starts'
With ADStream
.Type = 1
.Open
.Write HTTP.responseBody
.SaveToFile SaveP, 2
.Close
End With
'Tim's code Ends'
HTTPRequest = True
End Sub
Private Sub HTTP_OnResponseStart(ByVal Status As Long, ByVal ContentType As String)
End Sub
Private Sub Class_Terminate()
Set HTTP = Nothing
Set ADStream = Nothing
End Sub
Property Get RequestDone() As Boolean
RequestDone = HTTPRequest
End Property
Property Let SavePath(ByVal SavePath As String)
SaveP = SavePath
End Property
Основное различие между этим и тем, что описывал Тим, состоит в том, что WINHTTPRequest имеет свои собственные встроенные события, которые я могу заключить в один аккуратный маленький класс и использовать его везде, где бы он ни находился. Для меня это более элегантное решение, чем вызов XMLHttp и его передача классу для его ожидания.
Свернуть его в таком классе означает, что я могу сделать что-то вроде этого ..
Dim HTTP(10) As HTTPRequest
Dim URL(2, 10) As String
Dim I As Integer, J As Integer, Z As Integer, X As Integer
While Not J > I
For X = 1 To I
If Not TypeName(HTTP(X)) = "HTTPRequest" And Not URL(2, X) = Empty Then
Set HTTP(X) = New HTTPRequest
HTTP(X).SavePath = URL(2, X)
HTTP(X).Main (URL(1, X))
Z = Z + 1
ElseIf TypeName(HTTP(X)) = "HTTPRequest" Then
If Not HTTP(X).RequestDone Then
Exit For
Else
J = J + 1
Set HTTP(X) = Nothing
End If
End If
Next
DoEvents
Wend
Где я просто перебираю URL () с URL (1, N) - это URL, а URL (2, N) - это место сохранения.
Я признаю, что, возможно, это можно немного упростить, но сейчас мне нужно выполнить работу. Просто подбрасываю свое решение всем, кому интересно.