Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
?
Solved

Have Excel determine window focus?

Posted on 2014-11-07
10
Medium Priority
?
153 Views
Last Modified: 2014-12-05
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?
0
Comment
Question by:RWayneH
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 5
  • 4
10 Comments
 
LVL 1

Expert Comment

by:Angelo Mileto
ID: 40429661
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.
0
 
LVL 2

Expert Comment

by:Glen Richmond
ID: 40432211
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?
0
 

Author Comment

by:RWayneH
ID: 40432595
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?
0
Manage your data center from practically anywhere

The KN8164V features HD resolution of 1920 x 1200, FIPS 140-2 with level 1 security standards and virtual media transmissions at twice the speed. Built for reliability, the KN series provides local console and remote over IP access, ensuring 24/7 availability to all servers.

 
LVL 2

Expert Comment

by:Glen Richmond
ID: 40432678
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
0
 
LVL 2

Expert Comment

by:Glen Richmond
ID: 40432680
obvilousy you will need to change the Dim object type too, probably to just Object unless you register QTP in the COM references.
0
 

Author Comment

by:RWayneH
ID: 40433757
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.
0
 
LVL 2

Accepted Solution

by:
Glen Richmond earned 2000 total points
ID: 40434631
do you have any version of Visual Studio Express installed or greater?
Version 12 for desktop i have put togeter small app to list the tasks and get the details from the Op system.
unfortunatly it uses a reference to 4.5 .Net framework that cant be included as a ref in Excel.
But it will allow you to interigate the QTP process to get he generic name you need to use In GetObject
rather than having to use full path.
This class name once discovered using this tool will be the same on all machines and ergo can be used in  your code safley without worry over pathing issues.


Source code attached for lising app.
also example code :-
Public Class Form1

    Private m_Results As List(Of ManagementObject)

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal _
        e As System.EventArgs) Handles MyBase.Load
        m_Results = New List(Of ManagementObject)

        Dim searcher As New ManagementObjectSearcher("SELECT * " & _
            "FROM Win32_process")
        For Each result As ManagementObject In searcher.Get()
            lstCaptions.Items.Add(result.Item("Caption"))

            m_Results.Add(result)
        Next result
    End Sub


    ' Show the detail for the selection.
    Private Sub ShowDetail()
        If lstCaptions.SelectedIndex < 0 Then Exit Sub

        Dim result As ManagementObject = _
            m_Results.Item(lstCaptions.SelectedIndex)

        Dim txt As String
        'If radMof.Checked Then
        txt = result.GetText(TextFormat.Mof).ToString()
        'ElseIf radCimDtd20.Checked Then
        'txt = result.GetText(TextFormat.CimDtd20).ToString()
        'Else
        'txt = result.GetText(TextFormat.WmiDtd20).ToString()
        'End If

        txt = txt.Replace(vbLf, vbCrLf)
        txt = txt.Trim()
        txtDetails.Text = txt
    End Sub


    Private Sub lstCaptions_SelectedIndexChanged(sender As Object, e As EventArgs) Handles lstCaptions.SelectedIndexChanged
        ShowDetail()
    End Sub


End Class

Open in new window


Also if you dont have VS Studio Express, i suggest you get it, its free and is a great tool!
http://www.microsoft.com/en-gb/download/details.aspx?id=34673
WindowsApplication3.zip
0
 
LVL 2

Expert Comment

by:Glen Richmond
ID: 40434636
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.
0
 

Author Comment

by:RWayneH
ID: 40450639
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?
0
 

Author Closing Comment

by:RWayneH
ID: 40483463
Thanks for the help.
0

Featured Post

VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Sometimes clients can lose connectivity with the Lotus Notes Domino Server, but there's not always an obvious answer as to why it happens.   Read this article to follow one of the first experiences I had with Lotus Notes on a client's machine, my…
Know the reasons and solutions to move/import EDB to New Exchange Server. Also, find out how to recover an Exchange .edb file and to restore the file back.
Get a first impression of how PRTG looks and learn how it works.   This video is a short introduction to PRTG, as an initial overview or as a quick start for new PRTG users.
Many functions in Excel can make decisions. The most simple of these is the IF function: it returns a value depending on whether a condition you describe is true or false. Once you get the hang of using the IF function, you will find it easier to us…

722 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question