VBA access to call stack

M

Matthew Pfluger

I need to know if a function has called a function. I'd like to not add
extra input arguments. Is there read access to the Call Stack or would a
Global Variable be the key here?

Thanks,
Matthew Pfluger
 
M

Matthew Pfluger

I should also point out here that Application.Caller would not help since the
function is called through a Worksheet, and then that function calls other
functions.

The problem is that the second function transposes its array return if
called through the worksheet. This creates a single column, 2D array instead
of the 1D array the other functions are expecting.

Matthew Pfluger
 
J

Jim Thomlinson

Not really following you. You want to know if a function has called a
function. By checking the call stack. But when a function is called it goes
on the stack and is then taken off the stack when it is done. You could
possibly use the stack to determine if a currently running function was
called by another function but not the other way around.

In either case you don't really have access to the call stack in code. You
can see it in the VBE but I am unaware of how to read the stack in code...
 
J

JE McGimpsey

How about something like:


Public Function foo(byRef arg1 As Variant, _
Optional byVal RangeResult As Boolean = False) As Variant

Dim vArr As Variant

If Typeof Application.Caller is Range then RangeResult = True

'Function stuff here

If RangeResult Then
foo = Application.Transpose(vArr)
Else
foo = vArr
End If
End Function

Then your functions that call foo are responsible for determining
whether or not to return a result appropriate for a range, e.g.:

a = foo(b)

returns a 1-d array

a = foo(b, True)

returns a 2-d array
 

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

Top