简体   繁体   中英

How do I close an Excel spreadsheet in VBA code?

I have the following routine below that is meant to open an Excel spreadsheet and then go row by row to import the results into a table that is passed in. It works fine but the problem is if I try to open that same spreadsheet a second time I get a message that the file is in use and I have to Ctrl-Alt-Del to shut down Excel before I can use it again. I thought that the Set mySheet=Nothing and Set xlApp=Nothing would release the file but apparently not. What more can I do to make sure that Access lets go of the Excel file? Thanks in advance!

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 " & 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

Try using

xlApp.Quit

When you set xlApp to nothing you are only clearing the object within the procedure, you aren't doing anything to the actual Excel instance. All that setting XXX = nothing allows you to do is then reuse that object.

You will need to legally close the workbooks that are open as in

xlApp.Workbooks.Close
  
EXITSUB:

This will close the instances that are open.

Prior to this, kill all the instances or reboot your machine to clear all the instances that are open.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM