ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Worksheet Functions (https://www.excelbanter.com/excel-worksheet-functions/)
-   -   Passing Excel NAMED Range to VBA (https://www.excelbanter.com/excel-worksheet-functions/36782-passing-excel-named-range-vba.html)

BG

Passing Excel NAMED Range to VBA
 
Given a NAMED range called "Sheet1_Table" that refers to "Sheet1!e1:h4" and
the value "Sheet1_Table" in cell C1, how can I get the following VBA function:

Function say_what(ByRef input_arg As Variant) As Variant
If TypeName(input_arg) = "Range" Then
say_what = input_arg.Rows.Count & " by " & input_arg.Columns.Count
Else
say_what = TypeName(input_arg)
End If
End Function

to return the same result for =say_what( indirect(c1) ) and =say_what( c1 )?

say_what( indirect(c1) ) returns a correct "4 by 4" but say_what( c1 )
returns an incorrect "1 by 1".

Thank you,



How can I get

Trevor Shuttleworth

I'd say what the two calls return are correct.

You could also try: =say_what( Sheet1_Table ) = 4 by 4

Regards

Trevor


"BG" wrote in message
...
Given a NAMED range called "Sheet1_Table" that refers to "Sheet1!e1:h4"
and
the value "Sheet1_Table" in cell C1, how can I get the following VBA
function:

Function say_what(ByRef input_arg As Variant) As Variant
If TypeName(input_arg) = "Range" Then
say_what = input_arg.Rows.Count & " by " & input_arg.Columns.Count
Else
say_what = TypeName(input_arg)
End If
End Function

to return the same result for =say_what( indirect(c1) ) and =say_what(
c1 )?

say_what( indirect(c1) ) returns a correct "4 by 4" but say_what( c1 )
returns an incorrect "1 by 1".

Thank you,



How can I get




BG

Hi Trevor,

Thank you for your interest!

You are correct - i.e., both calls return results and =say_what(
Sheet1_Table ) returns 4 x 4. However, my question is: How do I make
=say_what( c1 ) produce the same result as =say_what( INDIRECT(c1) )? That
is, what do I need to do in the say_what finction to emulate the INDIRECT
function?

Thanks again, BG

"Trevor Shuttleworth" wrote:

I'd say what the two calls return are correct.

You could also try: =say_what( Sheet1_Table ) = 4 by 4

Regards

Trevor


"BG" wrote in message
...
Given a NAMED range called "Sheet1_Table" that refers to "Sheet1!e1:h4"
and
the value "Sheet1_Table" in cell C1, how can I get the following VBA
function:

Function say_what(ByRef input_arg As Variant) As Variant
If TypeName(input_arg) = "Range" Then
say_what = input_arg.Rows.Count & " by " & input_arg.Columns.Count
Else
say_what = TypeName(input_arg)
End If
End Function

to return the same result for =say_what( indirect(c1) ) and =say_what(
c1 )?

say_what( indirect(c1) ) returns a correct "4 by 4" but say_what( c1 )
returns an incorrect "1 by 1".

Thank you,



How can I get





Trevor Shuttleworth

BG

I'm not sure you can do what you want to do. When you pass the function the
range C1 you *are* passing it a 1x1 range, that is one cell. When you pass
it INDIRECT(C1), you are saying "pass the function the range *pointed to* by
the cell C1", in other words, Sheet1_Table ... which is a 4x4 range.

Thought of testing Range(input_arg) but I'm not making any progress. Sorry

Regards

Trevor


"BG" wrote in message
...
Hi Trevor,

Thank you for your interest!

You are correct - i.e., both calls return results and =say_what(
Sheet1_Table ) returns 4 x 4. However, my question is: How do I make
=say_what( c1 ) produce the same result as =say_what( INDIRECT(c1) )?
That
is, what do I need to do in the say_what finction to emulate the INDIRECT
function?

Thanks again, BG

"Trevor Shuttleworth" wrote:

I'd say what the two calls return are correct.

You could also try: =say_what( Sheet1_Table ) = 4 by 4

Regards

Trevor


"BG" wrote in message
...
Given a NAMED range called "Sheet1_Table" that refers to "Sheet1!e1:h4"
and
the value "Sheet1_Table" in cell C1, how can I get the following VBA
function:

Function say_what(ByRef input_arg As Variant) As Variant
If TypeName(input_arg) = "Range" Then
say_what = input_arg.Rows.Count & " by " & input_arg.Columns.Count
Else
say_what = TypeName(input_arg)
End If
End Function

to return the same result for =say_what( indirect(c1) ) and =say_what(
c1 )?

say_what( indirect(c1) ) returns a correct "4 by 4" but say_what( c1 )
returns an incorrect "1 by 1".

Thank you,



How can I get







BG

Thank you for your efforts!

"Trevor Shuttleworth" wrote:

BG

I'm not sure you can do what you want to do. When you pass the function the
range C1 you *are* passing it a 1x1 range, that is one cell. When you pass
it INDIRECT(C1), you are saying "pass the function the range *pointed to* by
the cell C1", in other words, Sheet1_Table ... which is a 4x4 range.

Thought of testing Range(input_arg) but I'm not making any progress. Sorry

Regards

Trevor


"BG" wrote in message
...
Hi Trevor,

Thank you for your interest!

You are correct - i.e., both calls return results and =say_what(
Sheet1_Table ) returns 4 x 4. However, my question is: How do I make
=say_what( c1 ) produce the same result as =say_what( INDIRECT(c1) )?
That
is, what do I need to do in the say_what finction to emulate the INDIRECT
function?

Thanks again, BG

"Trevor Shuttleworth" wrote:

I'd say what the two calls return are correct.

You could also try: =say_what( Sheet1_Table ) = 4 by 4

Regards

Trevor


"BG" wrote in message
...
Given a NAMED range called "Sheet1_Table" that refers to "Sheet1!e1:h4"
and
the value "Sheet1_Table" in cell C1, how can I get the following VBA
function:

Function say_what(ByRef input_arg As Variant) As Variant
If TypeName(input_arg) = "Range" Then
say_what = input_arg.Rows.Count & " by " & input_arg.Columns.Count
Else
say_what = TypeName(input_arg)
End If
End Function

to return the same result for =say_what( indirect(c1) ) and =say_what(
c1 )?

say_what( indirect(c1) ) returns a correct "4 by 4" but say_what( c1 )
returns an incorrect "1 by 1".

Thank you,



How can I get








All times are GMT +1. The time now is 08:24 AM.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
ExcelBanter.com