Excel VBA метод workbooks.open завершается ошибкой после загрузки и открытия нескольких файлов Excel - PullRequest
0 голосов
/ 12 марта 2019

Привет люди из интернета! Как следует из названия, в последнее время у меня были некоторые проблемы с моим кодом 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...