Почему я получаю эту ошибку каждые несколько итераций? «Компонент ActiveX не может создать объект»

Я запускаю программу, в которой мне нужно открывать файлы .xls в папке один за другим и получать от них информацию. В начале моей функции я запускаю этот код ниже для каждого файла .xls, который я хочу открыть.

Однако время от времени я получаю эту ошибку в четвертой строке кода: «Компонент ActiveX не может создать объект».

После нажатия кнопки «Отладка» в окне ошибки я могу просто нажать «Продолжить», и код начинает работать нормально. Он открывает файл и получает информацию, которую я хочу.

Почему возникает эта ошибка? Я не хочу продолжать нажимать, чтобы продвинуть этот процесс.

Заранее спасибо.

Function getPerfumeName(file)
    Dim XL As Excel.Application
    Dim WBK As Excel.Workbook
    Set XL = CreateObject("Excel.Application")
    Set WBK = XL.Workbooks.Open(file)

    phrase = Split(WBK.Sheets(1).Cells(3, 1).Value, ":")
    If phrase(0) = "PERFUME GCAS" Then
        getPerfumeName = phrase(UBound(phrase))
    Else
        getPerfumeName = ""
    End If

    WBK.Close

    Set XL = Nothing
End Function
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
1
0
26
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

I run this code below for each .xls file I want to open.

Может быть, потому что вы создаете их слишком много? Вне цикла используйте это только один раз, а затем внутри цикла используйте Set WBK = XL.Workbooks.Open(file), чтобы открыть файл, а затем закрыть файл до окончания цикла... Также, поскольку вы используете раннее связывание, вы можете использовать Dim XL As New Excel.Application один раз вне цикла, и он будет работай. Нет необходимости использовать обе линии...

Sub Sample()
    Dim XL As New Excel.Application
    Dim WBK As Excel.Workbook

    For i = 1 To whatever
        Set WBK = XL.Workbooks.Open(file)
        '
        '~~> Do Something
        '
        WBK.Close (False) 'or WBK.Close(True)
        Set WBK = Nothing
    Next i

    XL.Quit

    Set XL = Nothing
End Sub

Другие вопросы по теме