2015-02-17 9 views
1

Я использую Window 7 SP1 и MS Office 2010. Я запускаю запросы в Access 2010 и записываю результаты в отчет в Excel 2010 и отмечаю, что экземпляр Excel не завершаться из списка процессов. Чтобы убедиться, что это не мой код, я разделил его.MSAccess 2010 VBA Excel Процесс не завершается

  1. Следующий код открывает и завершает Excel, как и ожидалось:

    Public Sub Test() 
        Dim strRptDirPath As String: strRptDirPath = "C:\Projects\WeeklyAlarms\Report\" 
        Dim xlApp As Object 
    ' Dim xlWkBk As Object 
    ' Dim xlWkSht As Object 
        Dim strRptTl As String: strRptTl = "Report Template.xls" 
        Dim strRptSht As String: strRptSht = "Rpt" 
    
        Set xlApp = CreateObject("Excel.Application") 
         xlApp.Visible = False 
    
    ' Set xlWkBk = xlApp.Workbooks.Open(strRptDir & strRptTl) 
    ' Set xlWkSht = xlWkBk.Worksheets(strRptSht) 
    ' 
    '  xlWkSht.Cells(1, 1).Value = "TEST 1" 
    '  xlWkSht.Cells(2, 2).Value = "TEST 2" 
    '  xlWkSht.Cells(3, 3).Value = "TEST 3" 
    ' 
    '  xlWkBk.SaveAs (strRptDirPath & "TESTING.xls") 
    '  xlWkBk.Close 
         xlApp.Quit 
    
    ' Set xlWkSht = Nothing 
    ' Set xlWkBk = Nothing 
        Set xlApp = Nothing 
    
    End Sub 
    
  2. Однако, если я сослаться на книгу, экземпляр процесса Excel не завершается. Поиск по темам разговора делает ссылки на процесс, завершающийся после таймаута «ping» через период после закрытия Access - здесь это не так.

    Public Sub Test() 
        Dim strRptDirPath As String: strRptDirPath = "C:\Projects\WeeklyAlarms\Report\" 
        Dim xlApp As Object 
        Dim xlWkBk As Object 
    ' Dim xlWkSht As Object 
        Dim strRptTl As String: strRptTl = "Report Template.xls" 
        Dim strRptSht As String: strRptSht = "Rpt" 
    
        Set xlApp = CreateObject("Excel.Application") 
         xlApp.Visible = False 
    
        Set xlWkBk = xlApp.Workbooks.Open(strRptDir & strRptTl) 
    ' Set xlWkSht = xlWkBk.Worksheets(strRptSht) 
    ' 
    '  xlWkSht.Cells(1, 1).Value = "TEST 1" 
    '  xlWkSht.Cells(2, 2).Value = "TEST 2" 
    '  xlWkSht.Cells(3, 3).Value = "TEST 3" 
    
         xlWkBk.SaveAs (strRptDirPath & "TESTING.xls") 
         xlWkBk.Close 
         xlApp.Quit 
    
    ' Set xlWkSht = Nothing 
        Set xlWkBk = Nothing 
        Set xlApp = Nothing 
    
    End Sub 
    

У меня есть не-проверено Microsoft Excel 14,0 Object ссылку на библиотеку. Я не думаю, что сделал глобальные ссылки. Я не могу понять, что я делаю неправильно.

ответ

0

Попробуйте заменить все после xlWkBk.SaveAs (strRptDirPath & "TESTING.xls") линии с:

If Not xlWkBk Is Nothing Then 
    xlWkBk.Save 
    xlWkBk.Close 
    Set xlWkBk = Nothing 
End If 
If Not xlApp Is Nothing Then 
    xlApp.Quit 
    Set xlApp = Nothing 
End If 

Настройка его как это обеспечило мне, что все закрывается, как ожидалось

+0

благодаря @Dane_l - я пробовал, но экземпляр Excel остается в списке процессов – totallychibi

+0

Предполагаю, что вы отменили процесс, так что у вас нет процессов excel, после чего вы использовали этот код после? –

+0

есть. End-Process-Tree для каждого экземпляра Excel. Если я открою созданный файл Excel и закрою его из приложения Excel, процесс завершится. Поскольку это подразумевает, что ссылка открыта, я попытался закрыть ее дважды с помощью [xlApp.ActiveWorkbook.Close], а также [xlWkBk.Close], но получил сообщение об ошибке, в котором нет активного соединения – totallychibi

Смежные вопросы