Ureader.com  
Microsoft software help and Community
   home   |   control panel login   |   archive   |  
 
Excel
123quattro
charting
crashesgpfs
datamap
excel
interopoledde
links
misc
newusers
printing
programming
querydao
sdk
setup
templates
worksheet.functions
  
 
date: Tue, 22 Jul 2008 15:41:00 -0700,    group: microsoft.public.excel.programming        back       


GetObject when more than 1 Excel is running   
From within VB.Net, if I want to access an instance of Excel that is already 
running, I'd use something like.
dim Exc as Excel.Application
Exc = GetObject(, "Excel.Application")

However, suppose I have more than one instance of Excel open.  Is there a 
way to cycle through each open instance, and to pick a specific one to open?
-- 
Ed
date: Tue, 22 Jul 2008 15:41:00 -0700   author:   Ed White am

Re: GetObject when more than 1 Excel is running   
Hello Ed,

A few days ago, I helped a customer with a similar question ¡°how to 
automation multiple Excel instances¡± at this thread:

http://www.microsoft.com/communities/newsgroups/en-us/default.aspx?dg=microsoft.public.excel.programming&tid=e038db96-1556-4d32-a524-fe6a711b8409&cat=&lang=&cr=&sloc=&p=1
Here is an archive link: 
http://www.eggheadcafe.com/software/aspnet/32483244/more-about-trying-to-auto.aspx

Note: I made a mistake in the initial reply of the thread and explained the 
reason in the follow-ups that the method 2 
¡°IRunningObjectTable::EnumRunning¡±, in fact, does not work for Excel¡±. 
The only solution is to use the method 1 ¡°use BindToMoniker with the name 
of the file that is opened in that instance.¡±, namely, File Moniker. The 
code GetObject(, "Excel.Application")  is only able to return the first 
instance of Excel. Ed, would you please refer to that thread and let me know 
whether the information is helpful to you or not? If you have any other 
questions or concerns, please DON¡¯T hesitate to tell me.

Regards,
Jialiang Ge (jialge@online.microsoft.com, remove ¡®online.¡¯)
Microsoft Online Community Support

Delighting our customers is our #1 priority. We welcome your comments and 
suggestions about how we can improve the support we provide to you. Please 
feel free to let my manager know what you think of the level of service 
provided. You can send feedback directly to my manager at: 
msdnmg@microsoft.com.

==================================================
Get notification to my posts through email? Please refer to 
http://msdn.microsoft.com/subscriptions/managednewsgroups/default.aspx#notifications.

Note: The MSDN Managed Newsgroup support offering is for non-urgent issues 
where an initial response from the community or a Microsoft Support
Engineer within 1 business day is acceptable. Please note that each follow 
up response may take approximately 2 business days as the support
professional working with you may need further investigation to reach the 
most efficient resolution. The offering is not appropriate for situations
that require urgent, real-time or phone-based interactions or complex 
project analysis and dump analysis issues. Issues of this nature are best 
handled working with a dedicated Microsoft Support Engineer by contacting 
Microsoft Customer Support Services (CSS) at 
http://msdn.microsoft.com/subscriptions/support/default.aspx.
==================================================
This posting is provided "AS IS" with no warranties, and confers no rights.

"Ed White" <ewhite@newsgroups.nospam> wrote in message 
news:9985D161-FBD3-4E1B-8374-3CFC48C07E76@microsoft.com...
> From within VB.Net, if I want to access an instance of Excel that is 
> already
> running, I'd use something like.
> dim Exc as Excel.Application
> Exc = GetObject(, "Excel.Application")
>
> However, suppose I have more than one instance of Excel open.  Is there a
> way to cycle through each open instance, and to pick a specific one to 
> open?
> -- 
> Ed
date: Wed, 23 Jul 2008 10:44:45 +0800   author:   Jialiang Ge [MSFT]

Re: GetObject when more than 1 Excel is running   
Ed,

Check out this page:
http://support.microsoft.com/kb/288902

Here's the relevant part:
You can attach to a specific instance if you know the name of an open 
document in that instance. For example, if an instance of Excel is running 
with an open workbook named Book2, the following code attaches successfully 
to that instance even if it is not the earliest instance that was launched:
Set xlApp = GetObject("Book2").Application

Depending on what you're doing you might consider using CreateObject instead 
and opening the file you are interested in.  I think that's generally 
considered a safer practice.
hth,

Doug

"Ed White" <ewhite@newsgroups.nospam> wrote in message 
news:9985D161-FBD3-4E1B-8374-3CFC48C07E76@microsoft.com...
> From within VB.Net, if I want to access an instance of Excel that is 
> already
> running, I'd use something like.
> dim Exc as Excel.Application
> Exc = GetObject(, "Excel.Application")
>
> However, suppose I have more than one instance of Excel open.  Is there a
> way to cycle through each open instance, and to pick a specific one to 
> open?
> -- 
> Ed
date: Tue, 22 Jul 2008 19:49:03 -0700   author:   Doug Glancy

Re: GetObject when more than 1 Excel is running   
As already suggested, where the filename is known use GetObject to reference
the workbook then attach to the parent application.

For situations where there is no known loaded wb, Jialiang Ge appears to
have demonstrated how to find multiple instances with .net

For VBA, I have two methods, briefly:

The first enumerates Excel windows, then workbook windows to find the file
name of a loaded wb. Having got that try GetObject > parent. If that fails,
eg no loaded workbooks at all or some other reason, use DDE (from a helper
app) to add a new dummy hidden wb and try again.

The other way is finding in the ROT (clever stuff, not mine!) There are
dis/advantages with each. Via the ROT is faster but can't get be sure to get
all instances, eg no loaded wb as can with DDE (usually!).

If anyone is interested I have a demo that implements both methods. Having
got the ref's the withevents xlApp classes can track and record changes to
cells in all wb's in all instances, and one or two other things.

Regards,
Peter T
pmbthornton gmail com



"Ed White" <ewhite@newsgroups.nospam> wrote in message
news:9985D161-FBD3-4E1B-8374-3CFC48C07E76@microsoft.com...
> From within VB.Net, if I want to access an instance of Excel that is
already
> running, I'd use something like.
> dim Exc as Excel.Application
> Exc = GetObject(, "Excel.Application")
>
> However, suppose I have more than one instance of Excel open.  Is there a
> way to cycle through each open instance, and to pick a specific one to
open?
> -- 
> Ed
date: Wed, 23 Jul 2008 13:35:31 +0100   author:   Peter T peter_t@discussions

Google
 
Web ureader.com


    COPYRIGHT 2007, YARDI TECHNOLOGY LIMITED, ALL RIGHT RESERVE  |   contact us