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

Я запускаю программу, в которой мне нужно открывать файлы .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

1 Ответ

0 голосов
/ 08 апреля 2019

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

Может быть, потому что вы создаете слишком много из них? Вне цикла используйте это только один раз, а затем внутри цикла используйте 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...