Вы можете сохранить все ссылки в строке, разделив каждую из них на vbCrLf
, а затем использовать Split(yourstring, vbCrLf)
, чтобы получить массив ссылок. Таким образом, вам не нужно запускать это в Excel или, по крайней мере, вам не нужно использовать ячейки Excel.
Для этого создайте строковую переменную, например, sLinks
. Затем в первом цикле замените
ActiveSheet.Cells(i, 1) = internetinnerlink.href
на
sLinks = sLinks & internetinnerlink.href & vbCrLf
Как только это будет сделано, вы устранили хранениессылки в Excel. Затем вы можете передать эту строку в качестве параметра в ваш DownloadFiles
sub:
Sub DownloadFiles(p_sLinks)
Dim arrLinks As Variant
Dim sLink As String
Dim iLinkCount As Integer
Dim iCounter As Integer
arrLinks = Split(p_sLinks, vbCrLf)
iLinkCount = UBound(arrLinks) + 1
For iCounter = 1 to iLinkCount
sLink = arrLinks(iCounter - 1)
' Process sLink here
Next
End Sub
Вы можете объединить этот код с вашим существующим подпрограммой DownloadFiles, заменив цикл For Each link In range
на For iCounter = 1 to iLinkCount
, поместивкод из вашего цикла внутри этого нового цикла и использование sLink
в качестве ссылки на процесс вместо чтения его из Excel.
Вы можете разбить часть своего кода на подпрограммы, чтобы упростить чтение и устранение неполадок:
Sub DownloadFile(p_sURL, p_sLocalPath)
Dim xHttp As Object: Set xHttp = CreateObject("Microsoft.XMLHTTP")
xHttp.Open "GET", p_sURL, False
xHttp.send
With CreateObject("Adodb.Stream")
.Type = 1
.Open
.write xHttp.responseBody
.SaveToFile p_sLocalPath & getName(p_sURL), 2 ' //overwrite
End With
End Sub