将名称pipe理器Excel中创build的名称传递给函数VBA
我在名称pipe理器中创build了一个名称。 如何在VBA代码中为我的函数传递名称“MyRange1”参数?
在Excel中:
=MyFunction(MyRange1)
MyFunction是:
Public Function MyFunction(nameDefined As Variant) As String 'How get value of nameDefined ?? End Function
有两种方式来传递命名范围:
- 作为一个
String
- 作为
Range
对象
所以工作表单元格中的UDF()将具有:
=myudf("Name1")
要么
=myudf(Name1)
当然,UDF()将不得不被编码,以期望一个或另一个,
请注意,仅使用String
可能会出现波动问题。
编辑#1:
这里是一个传递Range
而不是String
的例子。 假设我们创buildMyRange1
:
和UDF()是这样的:
Public Function MyFunction(rng As Range) As String Dim r As Range For Each r In rng MyFunction = MyFunction & "..." & r.Text Next r End Function
然后我们可以在工作表单元格中使用它:
=MyFunction(MyRange1)
一旦UDF()具有范围,就可以获得其中包含的项目列表。
为了弄清楚类似的问题,你可以在代码中放置一个Breakpoint,并分析Locals窗口:
在Locals窗口中,您可以注意到您可以使用nameDefined(2,1)
访问“Str2”
(或者在你的Excel版本中,它可能是nameDefined(2)
for horizontal array)
您还可以使用某些VBA函数检查运行时types:
t = VBA.TypeName(nameDefined) ' t = "Variant()" v = VBA.VarType(nameDefined) ' v = vbArray + vbVariant ( = 8204 ) b = VBA.IsArray(nameDefined) ' b = True ( also True for range with more than one cell )