Привет люди из интернета!
Как следует из названия, в последнее время у меня были некоторые проблемы с моим кодом VBA. Более конкретно, я кодировал следующую функцию, которая получает массив дат в качестве входных данных, а затем загружает и открывает соответствующие книги Excel с веб-сайта, по одной, копирует определенный диапазон, вставляет его в thisWorkbook
, а затем закрывает загруженную книгу.
Public Function henexDownload(ByRef auctionDates() As Date, ByVal firstEmptyRow As Long)
Const lagieURL = "http://www.lagie.gr/fileadmin/user_upload/reports/DayAheadSchedulingResults/"
Const henexURL = "http://www.enexgroup.gr/fileadmin/user_upload/reports/DayAheadSchedulingResults/"
Dim tempRNG As Range
Dim tempWorkbook As Workbook
Dim requestURL As String
Dim fileName As String
Dim d As Integer
Dim i As Long
Dim j As Long
Set tempRNG = ThisWorkbook.Worksheets("Prices").Cells.Find(What:="HENEX", After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
j = tempRNG.Column
For d = LBound(auctionDates) To UBound(auctionDates)
i = firstEmptyRow
fileName = Format(auctionDates(d), "yyyymmdd") + "_DayAheadSchedulingResults_01.xls"
If Year(auctionDates(d)) >= 2018 Then
requestURL = henexURL + fileName
Else
requestURL = lagieURL + fileName
End If
If URLExists(requestURL) Then
Set tempWorkbook = Workbooks.Open(requestURL)
tempWorkbook.Worksheets(1).Range("C7:Y7").Copy
ThisWorkbook.Worksheets("Prices").Cells(i, j).PasteSpecial xlPasteValues, Transpose:=True
tempWorkbook.Close (False)
Else
MsgBox "The requested file:" + vbNewLine + vbNewLine + fileName + vbNewLine + vbNewLine + "is not available.", vbCritical
End If
firstEmptyRow = firstEmptyRow + 24
'ThisWorkbook.Save
Next d
End Function
Код работает точно так же, как ожидалось до случайного числа итераций.
Когда я впервые увидел эту проблему, это число было 15.
Код постоянно падал на 16-й итерации с сообщением «Извините, мы не смогли открыть ....», где ... - это URL файла.
Проведя некоторые исследования в Интернете, я столкнулся с некоторыми проблемами, которые кажутся похожими. В этих случаях некоторые люди предлагали периодически сохранять рабочую книгу, чтобы очистить кэш Excel. Я попробовал это без всякой удачи.
Перезагрузка моего компьютера, как правило, увеличивает количество итераций до сбоя кода, но все равно происходит случайный сбой.
Следует отметить, что сбой не зависит от того, существует файл или нет. Кажется, это связано только с количеством обрабатываемых файлов.
Может ли это быть проблема с памятью? Может ли это быть связано с временными файлами?
Любые предложения будут с благодарностью.
Функция URLExists
работает следующим образом:
Public Function URLExists(url As String) As Boolean 'checks if the URL actually exists
Dim request As Object
Dim ff As Integer
Dim rc As Variant
On Error GoTo endNow
Set request = CreateObject("WinHttp.WinHttpRequest.5.1")
With request
.Open "GET", url, False
.Send
rc = .StatusText
End With
Set request = Nothing
If rc = "OK" Then URLExists = True
Exit Function
endNow:
End Function