通过Application.Quit关闭Excel进程

时间:2017-08-06 16:00:25

标签: excel vba access-vba

我在Access中运行VBA代码并更新现有的Excel文件。

我必须为每个销售人员创建xls文件,并通过从通过ODBC驱动程序连接到Oracle数据库的Access accdb文件导出数据,对每月销售点的客户进行分组来更新单元格。

我们有大约50名销售人员,每人必须创建2个文件。如果我无法解决问题,我的PC上将有100个Excel进程。即使我使用VBA成功运行accdb,它也可能在运行时被冻结。

问题:

  1. 无法通过我尝试过的Application.Quit关闭Excel进程 似乎是通过Excel.Application.Workbooks对象打开一个xls文件 是的,即使我使用过,也抓住了xls文件。关闭 的SaveChanges:=真
  2. 无法针对相同的文件原因再次处理VBA代码 我确认了以前的excel文件操作过程 在任务管理器上,我必须每次都手动终止该过程。
  3. 我在互联网和MSDN网站上搜索。我找不到任何好的解决方案。

    Option Compare Database
    
    Const TARGET_SHEET = "SalesObjectiveSheet"
    
    Const FILE_CREATION_WORK_FOLDER As String = "Work"
    Const DESTINATION_ROOTPATH As String = "C:\Users\Administrator\Desktop"
    Const TARGET_SHEET2 As String = "SalesObjectivesSheet"
    Const HEADING_LINE_POSITION As Integer = 3
    
    Public objApp As Excel.Application
    Public objBooks As Excel.Workbooks
    Public objBook As Excel.Workbook
    Public objSheets As Excel.Worksheets
    Public objSheet As Excel.Worksheet
    
    Public Sub test200()
    
        Dim str As Boolean
    
        On Error GoTo Err_Handler
    
        strSalesName = "SalesName"
        strSalesOffice = "Tokyo"
        strTargetFolder = DESTINATION_ROOTPATH & "\" & FILE_CREATION_WORK_FOLDER
        strTargetFileName = "SalesObjectiveSheet_201708.xlsx"
    
        strTargetFullPath = strTargetFolder & "\" & strTargetFileName
    
        Set objApp = CreateObject("Excel.Application")
        Set objBook = objApp.Workbooks.Open(strTargetFullPath)
        Set objSheet = objBook.Worksheets(TARGET_SHEET2)
    
    
        If EditObjectSheetHeader(objSheet, objApp, objBook, _
                                objBooks, strSalesName, strSalesOffice, strTargetFileName) = False Then
            GoTo Err_Handler
        End If
    
    Exit_Handler:
    
        objApp.Quit
    
        Set objSheet = Nothing
        Set objBooks = Nothing
        Set objApp = Nothing
    
        Exit Sub
    
    Err_Handler:
    
    '    SysCmd acSysCmdRemoveMeter
        Resume Exit_Handler
    
    End Sub
    
    Function EditObjectSheetHeader(objSheet As Object, objApp As Object, objBook As Object, _
                        objBooks As Object, strSalesName, strSalesOffice, strTargetFileName) As Boolean
    
        Dim strProcedureName As String
        Dim strMonth As String
    
        On Error GoTo Err_Handler
    
        objSheet.Select
        objSheet.Activate
    
        strProcedureName = "EditObjectSheetHeader"
    
        EditObjectSheetHeader = False
    
        With objSheet.PageSetup
            .CenterHeader = "&14 " & "Month Sales Objectives"
            .RightHeader = "" & Chr(10) & "Sales Office:" & strSalesOffice & " Name:" & strSalesName
            .CenterFooter = "&P/&N"
            .PrintTitleRows = "$1:$" & HEADING_LINE_POSITION
            .LeftHeader = ""
        End With
    
    Exit_Handler:
    
            Workbooks(strTargetFileName).Close SaveChanges:=True
                     ' Frozen after I run the VBA code once cause of previous  & _
                             process use same file is existed it seems be.
    
    '        ActiveWorkbook.Close saveChanges:=True
                    ' Frozen after I run the VBA code once cause of & _
                                previous process use same file is existed & _
                                (Object and With is not defined error)
    '        objBook.Close SaveChanges:=True
                    ' Frozen after I run the VBA code once cause of & _
                                previous process use same file is existed & _
                                it seems be.
    '        ActiveWorkbook.Close SaveChanges:=True
                    ' Error unknown.
    '        ThisWorkbook.Save
                    'Error 1004 unknown.
    
            EditObjectSheetHeader = True
    
        Exit Function
    
    Err_Handler:
    
        Select Case Err.Number
            Case 9
                Debug.Print strProcedureName, Err.Number, Err.Description
                MsgBox Err.Description & " " & Err.Number, vbOKOnly, strProcedureName
            Case 70
                Debug.Print strProcedureName, Err.Number, Err.Description
                MsgBox Err.Description & " " & Err.Number, vbOKOnly, strProcedureName
                Resume
            Case Else
                Debug.Print strProcedureName, Err.Number, Err.Description
                MsgBox Err.Description & " " & Err.Number, vbExclamation, strProcedureName
        End Select
    
    End Function
    

    enter image description here

2 个答案:

答案 0 :(得分:1)

下面的代码行有帮助,但是其他任何打开的xls也将被关闭:

Shell "taskkill /F /IM EXCEL.EXE /T"

答案 1 :(得分:0)

在发布参考文件后尝试放置objApp.Quit

Set objSheet = Nothing
Set objBooks = Nothing
Set objApp = Nothing

objApp.Quit