Как мне закрыть электронную таблицу Excel в коде VBA?

#excel #vba #file #ms-access

#excel #vba #файл #ms-access

Вопрос:

У меня есть следующая процедура ниже, которая предназначена для открытия электронной таблицы Excel, а затем перехода строка за строкой для импорта результатов в таблицу, которая передается. Это работает нормально, но проблема в том, что если я попытаюсь открыть ту же таблицу во второй раз, я получу сообщение о том, что файл используется, и мне нужно нажать Ctrl-Alt-Del, чтобы закрыть Excel, прежде чем я смогу использовать его снова. Я думал, что Set mySheet=Nothing и Set xlApp = Nothing освободят файл, но, по-видимому, нет. Что еще я могу сделать, чтобы убедиться, что Access разрешает доступ к файлу Excel? Заранее спасибо!

 Public Sub MakeTempTable(strFilePath As String, tablename As String)
    Dim mySheet As Object
    Dim xlApp As Object
    Dim rs As DAO.Recordset
    Dim sql As String
    sql = "DELETE * FROM " amp; tablename
    DoCmd.RunSQL sql
    
    Set rs = CurrentDb.OpenRecordset(tablename)
    
    Set xlApp = CreateObject("Excel.Application")
    Set mySheet = xlApp.Workbooks.Open(strFilePath).Sheets(1)
    xlApp.Visible = False
    Set mySheet = xlApp.Sheets("Input")
    
    Dim dRows As Double
    dRows = 1
    Dim dRow As Double, dCol As Double
    dRow = 2
    On Error GoTo ERR
    Do
        dCol = 1
        rs.AddNew
        If mySheet.cells(dRow, 3) = "" Then Exit Do
        Do
            If mySheet.cells(dRow, dCol).Value <> "_END_" Then
                rs.Fields(dCol).Value = Nz(mySheet.cells(dRow, dCol).Value, "")
            dCol = dCol   1
            Else
                Exit Do
            End If
        Loop
        rs.Update
        dRow = dRow   1
    Loop

EXITSUB:
    Set mySheet = Nothing
    Set xlApp = Nothing
    Exit Sub
ERR:
    If ERR.Number = 3265 Then MsgBox "The species selected are incompatible. Canceling import.", vbCritical, "IMPORT ERROR"
    GoTo EXITSUB
End Sub
  

Ответ №1:

Попробуйте использовать

 xlApp.Quit
  

Когда вы устанавливаете для xlApp значение nothing, вы только очищаете объект в рамках процедуры, вы ничего не делаете с фактическим экземпляром Excel. Все, что позволяет вам сделать параметр XXX = nothing, — это повторно использовать этот объект.

Ответ №2:

Вам нужно будет юридически закрыть книги, которые открыты, как в

 xlApp.Workbooks.Закрыть
 
ЗАВЕРШАЕТ работу:

Это закроет открытые экземпляры.

Перед этим отключите все экземпляры или перезагрузите компьютер, чтобы очистить все открытые экземпляры.