Excel Instance

  • Thread starter Thread starter FuzzyLogic
  • Start date Start date
F

FuzzyLogic

I m callling excel application from within a VB component, which is a
Active X .exe but the problem is that when I no more need excel i want
to terminate it instance.

What I m doing is that

objExcel.Quit
objExcel.SendKeys("%fx")
set objExcel = nothing

but the instance of the excel does not terminate and remains in memory
as it appear from the Task Manager.

When the next time I open the excel on the same pattern
(Programmtically).

The Excel application does not becomes fully visible but it only some
of the main menus and the application become fuzzy. I have quit all
the programs and terminate every thing what I started to smooth
funtioning.

This is irritating to me.

Can any one please suggest me on the issue.

I tried to get help for the Function DDETerminate and DDEInitiate etc.

but could not solve the probelm.


Regards

Fuzzy.......
 
Use the GetObject function to see if an instance of Excel
is already running. If so, activate it else create a new
instance.

' Declare necessary API routines:
Declare Function FindWindow Lib "user32" Alias _
"FindWindowA" (ByVal lpClassName as String, _
ByVal lpWindowName As Long) As Long

Declare Function SendMessage Lib "user32" Alias _
"SendMessageA" (ByVal hWnd as Long,ByVal wMsg as Long, _
ByVal wParam as Long, _
ByVal lParam As Long) As Long

Sub GetExcel()
Dim MyXL As Object ' Variable to hold reference
' to Microsoft Excel.
Dim ExcelWasNotRunning As Boolean ' Flag for final
release.

' Test to see if there is a copy of Microsoft Excel
already running.
On Error Resume Next ' Defer error trapping.
' Getobject function called without the first argument
returns a
' reference to an instance of the application. If the
application isn't
' running, an error occurs.
Set MyXL = Getobject(, "Excel.Application")
If Err.Number <> 0 Then ExcelWasNotRunning = True
Err.Clear ' Clear Err object in case error occurred.

' Check for Microsoft Excel. If Microsoft Excel is
running,
' enter it into the Running Object table.
DetectExcel

' Set the object variable to reference the file you want
to see.
Set MyXL = Getobject("c:\vb4\MYTEST.XLS")

' Show Microsoft Excel through its Application property.
Then
' show the actual window containing the file using the
Windows
' collection of the MyXL object reference.
MyXL.Application.Visible = True
MyXL.Parent.Windows(1).Visible = True
Do manipulations of your file here.
' ...
' If this copy of Microsoft Excel was not running when you
' started, close it using the Application property's Quit
method.
' Note that when you try to quit Microsoft Excel, the
' title bar blinks and a message is displayed asking if
you
' want to save any loaded files.
If ExcelWasNotRunning = True Then
MyXL.Application.Quit
End IF

Set MyXL = Nothing ' Release reference to the
' application and spreadsheet.
End Sub

Sub DetectExcel()
' Procedure dectects a running Excel and registers it.
Const WM_USER = 1024
Dim hWnd As Long
' If Excel is running this API call returns its handle.
hWnd = FindWindow("XLMAIN", 0)
If hWnd = 0 Then ' 0 means Excel not running.
Exit Sub
Else
' Excel is running so use the SendMessage API
' function to enter it in the Running Object Table.
SendMessage hWnd, WM_USER + 18, 0, 0
End If
End Sub
 
Thanx Mike,

I am already using the GetObject Function, but there are some othe
hints in ur suggestion. I will try with these things.

and will inform u afterwards.


REGARD

Fuzzy...
 
Back
Top