VBA - файл Excel не закрывается с помощью метода .close - PullRequest
0 голосов
/ 09 октября 2018

Я создал UDF, в котором используется исходный файл Excel, и обработайте данные как результат UDF.

Однако исходный файл не закрывается, даже если я использую метод .close и вводим'- код ниже.

Любая помощь с закрытием исходного файла после его использования будет очень ценной, большое спасибо!

sfilename = "R:\values only.xlsb"

Application.DisplayAlerts = False
With GetObject(sfilename)
    range1 = .Sheets("RawData").Range("A:B")
    If IsError(Application.VLookup(lookupval, range1, 2, False)) Then
        If IsError(Application.VLookup(lookupval2, range1, 2, False)) Then
            MsgBox "Pair or date does not exist!"
        Else

            getex = 1 / Application.VLookup(lookupval2, range1, 2, False)

        End If

    Else

        getex = Application.VLookup(lookupval, range1, 2, False)

    End If
    .Close
End With
Application.DisplayAlerts = True

1 Ответ

0 голосов
/ 09 октября 2018

Как упомянуто в комментарии выше, вы можете открыть свой файл в другом экземпляре (в этом же случае ваш вызов формулы UDF не будет работать)

 Set objExcel = CreateObject("Excel.Application")
     With objExcel
            .Visible = False
            .DisplayAlerts = False
            With .Workbooks.Open(sfilename)
                range1 = .Sheets(2).Range("A:B")
                If IsError(Application.VLookup(lookupval, range1, 2, False)) Then
                    If IsError(Application.VLookup(lookupval2, range1, 2, False)) Then
                        MsgBox "Pair or date does not exist!" 'do not use msgbox but give getex a string => getex = "error"
                    Else
                        getex = 1 / Application.VLookup(lookupval2, range1, 2, False)
                    End If
                 Else
                        getex = Application.VLookup(lookupval, range1, 2, False)
                End If
            .Close
        End With
        .Quit
    End With

Другая возможность - поместить результат вашего UDFсаб в листе (я бы так сделал)

...