Who's my caller info?

  • Thread starter Thread starter count
  • Start date Start date
C

count

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

TIA
Paul
 
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
 
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.
 
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
 
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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Back
Top