#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.Закрыть ЗАВЕРШАЕТ работу:
Это закроет открытые экземпляры.
Перед этим отключите все экземпляры или перезагрузите компьютер, чтобы очистить все открытые экземпляры.