Who's my caller info?

C

count

Hi,
Is there a way or a trick to detect in a procedure the name of its caller?

TIA
Paul
 
D

Dave Peterson

Does a neat trick include keeping track yourself?

Option Explicit
Public myParentCaller As String
Sub test1()
Dim myParentTemp As String
MsgBox "I got called from: " & myParentCaller
myParentTemp = myParentCaller
myParentCaller = "test1"
Call test2
myParentCaller = myParentTemp
MsgBox "I still got called from: " & myParentCaller
End Sub
Sub test2()
Dim myParentTemp As String
MsgBox "I got called from: " & myParentCaller
myParentTemp = myParentCaller
myParentCaller = "test2"
Call test3
myParentCaller = myParentTemp
MsgBox "I still got called from: " & myParentCaller
End Sub
Sub test3()
Dim myParentTemp As String
MsgBox "I got called from: " & myParentCaller
myParentTemp = myParentCaller
'no more calls, just in case...
myParentCaller = myParentTemp
MsgBox "I still got called from: " & myParentCaller
End Sub
 
T

Tom Ogilvy

Only if it is called from the onaction property of a shape or if it is in a
function called from a worksheet cell. Then you can use application.caller.
If another procedure calls it, you would have to pass in the name of the
procedure by hard coding the name in your code.
 
S

Steve Garman

You probably don't need all these possibilities:

Function doTest(Optional arg = "???")
Dim v As Variant
Select Case TypeName(Application.caller)
Case "Range"
v = Application.caller.Address
Case "String"
v = Application.caller
Case "Error"
v = "arg=" & arg
Case Else
v = "unknown"
End Select
doTest = "caller = " & v
End Function

Sub proc1()
Dim x As Variant
MsgBox doTest("proc1")
End Sub

Sub proc2()
Dim x As Variant
MsgBox doTest("proc2")
End Sub
 
C

count

Dave,
Thanks for the solution. Will adapt and adopt.
As this involves work, it doesn't classify as a neat trick - unless one is
an accountant...
:)
Paul
 
Top