在任务管理器中结束从 VBA 代码创建的实例

To end the instance created from VBA code in Task manager

我写了一个 VBA(Access) 代码来将数据从 Access 数据库导出到 Excel 工作表。在代码的末尾,我关闭了所有对象、记录集、工作表,分别 'nothing' 是 set.After 第一个 运行,我检查任务管理器,我看到 Excel 仍然存在于其中。导出后,如果我关闭 Access 数据库,任务管理器中的实例将结束。这是正常的吗?或者我必须编辑我的代码吗?

缺点:当数据库仍处于打开状态时,我无法 运行 第二次执行代码。 下面是我的代码

Public Sub Expdata()

    Dim rst As DAO.Recordset
    Dim xlWBk As Object, Apxl As Object
    Dim wsMetaData As Worksheet
    Dim wsPlanning As Worksheet
    Dim PathEx As String
    Dim i As Long
    Dim Tempsheetname As String
    Dim blnEXCEL As Boolean

    blnEXCEL = False
    On Error Resume Next
    Set Apxl = GetObject(, "Excel.Application")
    If Err.Number <> 0 Then
    Set Apxl = CreateObject("Excel.Application")
    blnEXCEL = True
    End If
    Err.Clear

    On Error GoTo 0
    PathEx = Forms("Export").Text14 'path comes from the directory given in form
    'Set Apxl = CreateObject("Excel.Application")
    Set xlWBk = Apxl.Workbooks.Open(PathEx)

    Tempsheetname = "Metadatasheet"
    Worksheets.Add.Name = Tempsheetname

    Set wsMetaData = xlWBk.Worksheets("Metadatasheet")
    Set wsPlanning = xlWBk.Worksheets("PlanningData")

    Apxl.Visible = True  'uncomment for debug to see excel file

    Set rst = CurrentDb.OpenRecordset("LatestSNR")

    For i = 1 To rst.Fields.Count
        wsMetaData.Cells(1, i).Value = rst.Fields(i - 1).Name
    Next i
    rst.MoveFirst

    wsMetaData.Range("A2").CopyFromRecordset rst

    'calls Exp_Refresh module
    Call Exp_Refresh.RfData(xlWBk)

    Set xlWBk = Apxl.Workbooks.Open(PathEx)
    xlWBk.Sheets("Metadatasheet").Select
    DoCmd.SetWarnings False
    xlWBk.Application.DisplayAlerts = False
    xlWBk.Sheets("Metadatasheet").Delete
    DoCmd.SetWarnings True
    xlWBk.Application.DisplayAlerts = True

    'Close all the objects and recordsets
    rst.Close
    Set rst = Nothing


    xlWBk.Close SaveChanges:=True
    Set xlWBk = Nothing
    Set wsMetaData = Nothing
    Set wsPlanning = Nothing

    If blnEXCEL = True Then Apxl.Quit
    Set Apxl = Nothing

    MsgBox "Export Successful !!!"

End Sub

它Excel没有关闭?然后在工作簿上创建对象,而不是 ExcelApp.

此外,如果 excel 设置为可见,则 COM 规则表示如果用户可以看到它,则不要关闭它。

经过一番研究..我找到了错误点

Tempsheetname = "Metadatasheet"
Worksheets.Add.Name = Tempsheetname

此时它已经失去了对对象的引用。所以如果 "Access app has ANY reference to an Excel resource, Excel won't close".

我所要做的就是;

 Tempsheetname = "Metadatasheet"
    xlWBk.Worksheets.Add.Name = Tempsheetname