Home |
Search |
Today's Posts |
#1
Posted to microsoft.public.excel.programming
|
|||
|
|||
How to detect MS Word or MS Access calls MS Excel using VBA
Hello all
Is it possible to detect which application call the MS Excel using VBA? I want to put some conditions in the Workbook_Open() method. IF MS Word call Then Do Job 1 Else Do Job 2 Any methods for doing it? Thanks Bon |
#2
Posted to microsoft.public.excel.programming
|
|||
|
|||
How to detect MS Word or MS Access calls MS Excel using VBA
Application.Hinstance
Will give you the window handle of the calling application. Then with this you can get the full path of the calling application with code that was recently posted in the microsoft.public.vb.winapi newsgroup: GetModulePathFromHandle - by request. posted on 4 December by Kevin Provance. Maybe somebody knows a more direct way. RBS "Bon" wrote in message oups.com... Hello all Is it possible to detect which application call the MS Excel using VBA? I want to put some conditions in the Workbook_Open() method. IF MS Word call Then Do Job 1 Else Do Job 2 Any methods for doing it? Thanks Bon |
#3
Posted to microsoft.public.excel.programming
|
|||
|
|||
How to detect MS Word or MS Access calls MS Excel using VBA
Ignore my post as Hinstance returns the instance handle not the window
handle. RBS "RB Smissaert" wrote in message ... Application.Hinstance Will give you the window handle of the calling application. Then with this you can get the full path of the calling application with code that was recently posted in the microsoft.public.vb.winapi newsgroup: GetModulePathFromHandle - by request. posted on 4 December by Kevin Provance. Maybe somebody knows a more direct way. RBS "Bon" wrote in message oups.com... Hello all Is it possible to detect which application call the MS Excel using VBA? I want to put some conditions in the Workbook_Open() method. IF MS Word call Then Do Job 1 Else Do Job 2 Any methods for doing it? Thanks Bon |
#4
Posted to microsoft.public.excel.programming
|
|||
|
|||
How to detect MS Word or MS Access calls MS Excel using VBA
This is more difficult than I thought and I still don't understand it fully,
but here is some code that might give you a start. I am sure somebody more familiar with this can improve on it. Option Explicit Private Const GW_HWNDFIRST As Long = 0 Private Const GW_HWNDLAST As Long = 1 Private Const GW_HWNDNEXT As Long = 2 Private Const GW_HWNDPREV As Long = 3 Private Const GW_OWNER As Long = 4 Private Const GW_CHILD As Long = 5 Private Const GWL_HINSTANCE As Long = -6 Private Declare Function GetDesktopWindow Lib "user32" () As Long Private Declare Function GetWindow Lib "user32" _ (ByVal hwnd As Long, _ ByVal wCmd As Long) As Long Private Declare Function GetWindowText Lib "user32" _ Alias "GetWindowTextA" _ (ByVal hwnd As Long, _ ByVal lpString As String, _ ByVal cch As Long) As Long Private Declare Function GetClassName Lib "user32" _ Alias "GetClassNameA" _ (ByVal hwnd As Long, _ ByVal lpClassName As String, _ ByVal nMaxCount As Long) As Long Private Declare Function GetWindowLong Lib "user32" Alias _ "GetWindowLongA" (ByVal hwnd As Long, _ ByVal nIndex _ As Long) As Long Function FindWindowHwndLike(hWndStart As Long, _ ClassName As String, _ WindowTitle As String, _ level As Long, _ lHolder As Long, _ Optional lHinstanceToFind As Long = -1, _ Optional coll As Collection) As Long 'finds the first window where the class name starts with ClassName 'and where the Window title starts with WindowTitle, returns Hwnd 'optionally finds: 'the hwnd of the calling process found by the Hinstance 'the window title of this calling application 'the window class of this calling application '------------------------------------------------------------------ Dim hwnd As Long Dim sWindowTitle As String Dim sClassName As String Dim r As Long Static bFound As Boolean Dim lCurrentHinstance As Long Dim arr(1 To 3) If level = 0 Then bFound = False End If If bFound Then Exit Function End If 'Initialize if necessary. This is only executed 'when level = 0 and hWndStart = 0, normally 'only on the first call to the routine. '---------------------------------------------- If level = 0 Then If hWndStart = 0 Then hWndStart = GetDesktopWindow() End If End If 'Increase recursion counter '-------------------------- level = level + 1 'Get first child window '---------------------- hwnd = GetWindow(hWndStart, GW_CHILD) Do While hwnd 0 And bFound = False 'Search children by recursion '---------------------------- lHolder = FindWindowHwndLike(hwnd, _ ClassName, _ WindowTitle, _ level, _ lHolder, _ lHinstanceToFind, _ coll) 'Get the window text '------------------- sWindowTitle = Space$(255) r = GetWindowText(hwnd, sWindowTitle, 255) sWindowTitle = Left$(sWindowTitle, r) 'get the class name '------------------ sClassName = Space$(255) r = GetClassName(hwnd, sClassName, 255) sClassName = Left$(sClassName, r) If lHinstanceToFind -1 Then lCurrentHinstance = GetWindowLong(lHolder, _ GWL_HINSTANCE) If lCurrentHinstance = lHinstanceToFind Then arr(1) = lHolder arr(2) = sWindowTitle arr(3) = sClassName coll.Add arr FindWindowHwndLike = hwnd lHolder = hwnd bFound = True Exit Function End If End If If InStr(1, sWindowTitle, WindowTitle, vbTextCompare) 0 And _ InStr(1, sClassName, ClassName, vbTextCompare) 0 Then FindWindowHwndLike = hwnd lHolder = hwnd If lHinstanceToFind = -1 Then bFound = True Exit Function End If End If 'Get next child window '--------------------- hwnd = GetWindow(hwnd, GW_HWNDNEXT) Loop FindWindowHwndLike = lHolder End Function Sub test() Dim lHinstance As Long Dim coll As Collection Dim strResult As String Dim i As Long Set coll = New Collection lHinstance = Application.Hinstance FindWindowHwndLike 0, _ "", _ "CallingApp.xls", _ 0, _ 0, _ lHinstance, _ coll For i = 1 To coll.Count strResult = strResult & _ coll(i)(1) & " -- " & _ coll(i)(2) & " -- " & _ coll(i)(3) & _ vbCrLf Next MsgBox "Finding callers for Hinstance: " & lHinstance & _ vbCrLf & vbCrLf & _ strResult, , _ "calling hwnd -- calling window title -- calling window class" End Sub RBS "Bon" wrote in message oups.com... Hello all Is it possible to detect which application call the MS Excel using VBA? I want to put some conditions in the Workbook_Open() method. IF MS Word call Then Do Job 1 Else Do Job 2 Any methods for doing it? Thanks Bon |
Reply |
Thread Tools | Search this Thread |
Display Modes | |
|
|
Similar Threads | ||||
Thread | Forum | |||
clipboard clearing in excel, access, word... | Excel Discussion (Misc queries) | |||
Can I directly from Excel publish to Word as in Access | Excel Discussion (Misc queries) | |||
How do I operate microsoft excel,word and access | Setting up and Configuration of Excel | |||
How do I operate microsoft excel,word and access | Setting up and Configuration of Excel | |||
Converting Access dll calls to Excel program | Excel Programming |