Link to home
Start Free TrialLog in
Avatar of RWayneH
RWayneHFlag for United States of America

asked on

Have Excel determine window focus?

Is there a way in VBA to ask Excel, what are the active windows running and set focus to the one I want?
I am running a process in QTP that dips into a Excel file that will login me into SAP.  However SAP keeps the focus and I cannot get it back to QTP after SAP is running.  Thinking the Application.SendKeys {"%Tab"} or something simuliar, but prefer looping through the active window sessions a picking the proper one to get around having to use SendKeys.

Has anyone come across this? and how did you get back to the session that you need?
Avatar of Angelo Mileto
Angelo Mileto

If you have multiple files,
    Windows(QTPFile.xls).Activate - or whatever it's called

If it's all in one file and/or you want a specific sheet
    Sheets("Sheet Name").Select

I've used both of these in the past with success.
is the code behind the calling program that logs into SAP still runing at this time or has it opened SAP in a modal fasion and waiting for it to be dismissed before continuing?
Avatar of RWayneH

ASKER

Yes it is still running, The code behind opening SAP is just to do that.  Unless you know of a way to do this directly in QTC, I will not have to bounce out of QTP run it and go back in.  I need to shift focus back to QTP so it can perform the rest of the test, even though technically I could complete the test in Excel (which I used to log into SAP)  I did get it to work by using the following:

AppActivate ("QuickTest Professional - [C:\QTP\CreateSO_BlankHeader*]")

However it uses the application name and the full file path.  Is there a way to make this more dynamic?  When I reuse this I do not want to have to dal with exact folder paths.  Is there a way to use a MID on this and just search by maybe "QuickTest Pro"??  or collect all session Titles and pull in from that group?
could you not connect to QTP via com and have control over it that way?

I dont knwo how you open QTP to Log on, but you can always GetObject from the Process queue.
ive used this to connect to Excel in the past a kill any of the open apps..

Look in the task manager and try it?

Sub KillAnyExcel()
		
		On Error GoTo killerr
		
		Dim XlsToKill As Excel.Application
		XlsToKill = GetObject( , "Excel.Application")
		
		XlsToKill.DisplayAlerts = False
		XlsToKill.Quit()
		
		XlsToKill = Nothing
		
killerr: 
		Exit Sub
		
	End Sub

Open in new window


http://msdn.microsoft.com/en-us/library/e9waz863(v=vs.90).aspx
obvilousy you will need to change the Dim object type too, probably to just Object unless you register QTP in the COM references.
Avatar of RWayneH

ASKER

is there a way to loop thru session and gather names?  Then if one of them has MID "QuickTest Pro"  ?? make that one active session.
ASKER CERTIFIED SOLUTION
Avatar of Glen Richmond
Glen Richmond
Flag of United Kingdom of Great Britain and Northern Ireland image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
ill also see if there is a way to ref the system dll in excel to enumarate the Tasks list, so you can cycle tasks in excel as you requested.
Avatar of RWayneH

ASKER

I do not have Visual Studio Express, nor will the users that will need to run this.  Is there a way to do this directly in VBA?
Avatar of RWayneH

ASKER

Thanks for the help.