ACC2000: Applications Run from Automation Do Not Always Close

ID: q210129


The information in this article applies to:

Advanced: Requires expert coding, interoperability, and multiuser skills.

This article applies to a Microsoft Access database (.mdb) and a Microsoft Access project (.adp).


SUMMARY

When you open other applications, such as other Microsoft Office 2000 programs, through Automation code, the applications that you open may not always close when your code finishes running.


MORE INFORMATION

Microsoft provides programming examples for illustration only, without warranty either expressed or implied, including, but not limited to, the implied warranties of merchantability and/or fitness for a particular purpose. This article assumes that you are familiar with the programming language being demonstrated and the tools used to create and debug procedures. Microsoft support professionals can help explain the functionality of a particular procedure, but they will not modify these examples to provide added functionality or construct procedures to meet your specific needs. If you have limited programming experience, you may want to contact a Microsoft Certified Solution Provider or the Microsoft fee-based consulting line at (800) 936-5200. For more information about Microsoft Certified Solution Providers, please see the following page on the World Wide Web:

http://www.microsoft.com/mcsp/
For more information about the support options available from Microsoft, please see the following page on the World Wide Web:

http://www.microsoft.com/support/supportnet/overview/overview.asp
You can use Automation code to open and manipulate other Microsoft Office programs. When you open a program by using Automation, an instance of the program is created in memory. If you don't close each instance of a program that you open, that instance may remain open but hidden. Each time that this happens, additional memory resources are consumed on you computer until you either restart the computer or shut down the hidden instances of the program manually. Having multiple, hidden instances of a program in memory can adversely affect the performance of your computer.

To prevent multiple, hidden instances of a program started with Automation code from getting stuck in memory, explicitly close each instance of the program when you finish working with it. You can explicitly close an instance of an Office 2000 program by using the Quit method at the end of your Automation code. The following Office 2000 applications support the Quit method: The following example starts an instance of Excel and opens a workbook. It then uses the Quit method to terminate the instance of Excel when the procedure is finished running.

Function Automation_To_Excel()
    Dim objExcel As Object
    
    ' Create a new instance of Excel.
    Set objExcel = CreateObject("Excel.Application")
    
    ' Show the instance of Excel on the screen.
    objExcel.Visible = True
    
    ' Open a file named SampleFile.xls
    objExcel.Workbooks.Open ("C:\My Documents\SampleFile.xls")
    
    ' Explicitly close the instance of Excel to free up memory
    ' and set the variable to Nothing to free up the name
    ' space in Access.
    objExcel.Quit
    Set objExcel = Nothing
End Function 

Converting from Microsoft Access 2.0

In Access 2.0, the Quit method needed to be enclosed in brackets to work.

objExcel.[Quit] 
When you convert a database that uses the Quit method in this fashion from Access 2.0 to Access 2000, you will need to manually remove the brackets from the Quit method. The brackets will not cause an error, but if they are present, the Quit method will not close the instance of the program being run.

Steps to Manually Shut Down Hidden Instances of Programs

Windows 95 and Later

  1. Press CTRL+ALT+DELETE to open the Close Programs dialog box.


  2. Click to select the instance of the program that you want to shut down, and then click End Task.


Windows NT

  1. Press CTRL+ALT+DELETE to open the Windows NT Security dialog box.


  2. Click Task Manager.


  3. Switch to the Processes tab.


  4. Click to select the process that you want to shut down, and then click End Process.


Steps to Reproduce the Problem

WARNING: Running this sample code will leave hidden instances of Excel running in your computer's memory. You will have to follow the steps listed under the "How to Manually Shut Down Hidden Instances of Programs" section earlier in this article to close these instances. Leaving hidden programs running in your computer's memory could affect your computer's performance.

The following code opens an instance of Excel and a sample file, but fails to explicitly close the instance. When the function is finished, the instance of Excel is still in memory.
  1. Type or paste the following code into a module.


  2. 
    Function Automation_To_Excel()
        Dim objExcel As Object
        
        ' Create a new instance of Excel.
        Set objExcel = CreateObject("Excel.Application")
        
        ' This sample will actually leave a hidden copy of Excel
        ' in your computer's memory. To leave an open copy of Excel
        ' on the task bar, remove the comment mark from the
        ' line below.
        ' objExcel.Visible = True
        
        ' Open a file named SampleFile.xls
        objExcel.Workbooks.Open ("C:\My Documents\SampleFile.xls")
    End Function 
  3. In the Immediate Window, type the following line, and then press ENTER:


  4. ?Automation_To_Excel 
  5. Use one of the methods listed earlier in this article to find and remove the hidden instance of Excel.



REFERENCES

For more information about programming with Automation, in the Visual Basic Editor, click Microsoft Visual Basic Help on the Help menu, type "Understanding Automation" in the Office Assistant or the Answer Wizard, and then click Search to view the topic.

Additional query words: conversion issue OLE


Keywords          : kbinterop kbole kbdta AccCon IntpOlea 
Version           : WINDOWS:2000
Platform          : WINDOWS 
Issue type        : kbhowto 

Last Reviewed: July 6, 1999