UDF Worksheet/VBA discrimination?

G

Guest

I'm looking for a way to reliably detect whether a UDF is called from a
worksheet as opposed to a call from VBA - without explicitly declaring a
parameter in the calling argument for that purpose (ie. an Optional Boolean
variable for instance).

I am currently using a unique combination of existing parameters along with
"ActiveCell" to perform the discrimination, but I'm concerned that under some
improbable, yet possible conditions a false positive could occur. I was
hoping that I could use "Application.ThisCell.Address", where I could test
for "Nothing" if it was called by VBA. Unfortunately, a runtime error occurs
at the test when it's called by VBA, citing an error in the "Method" ThisCell
(thought it was a property?). Apparently, it's not just set to "Nothing" if
called by VBA, it must not exist.

Any suggestions? Thanks.
 
J

Jim Cone

Function Mush() As String
MsgBox TypeName(Application.Caller)
Mush = "Made from oatmeal"
End Function

Sub MakeBreakfast()
MsgBox Mush
End Sub

'Also call it from the worksheet and see what is displayed.
--
Jim Cone
San Francisco, USA
http://www.realezsites.com/bus/primitivesoftware


"mickey" <[email protected]>
wrote in message
I'm looking for a way to reliably detect whether a UDF is called from a
worksheet as opposed to a call from VBA - without explicitly declaring a
parameter in the calling argument for that purpose (ie. an Optional Boolean
variable for instance).

I am currently using a unique combination of existing parameters along with
"ActiveCell" to perform the discrimination, but I'm concerned that under some
improbable, yet possible conditions a false positive could occur. I was
hoping that I could use "Application.ThisCell.Address", where I could test
for "Nothing" if it was called by VBA. Unfortunately, a runtime error occurs
at the test when it's called by VBA, citing an error in the "Method" ThisCell
(thought it was a property?). Apparently, it's not just set to "Nothing" if
called by VBA, it must not exist.

Any suggestions? Thanks.
 
G

Guest

It looks like it will work, it returns a "Range" when called by the
worksheet. Not sure what it returns if called by VBA: it's not "String".
But, all I need do is trap on "Range" anything else can be assumed to be a
VBA call.

Thanks Jim
 

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