我在名称管理器中创建了一个名称。如何传递名称" MyRange1"我的函数在VBA代码中的参数?
在Excel中:
=MyFunction(MyRange1)
MyFunction是:
Public Function MyFunction(nameDefined As Variant) As String
'How get value of nameDefined ??
End Function
答案 0 :(得分:2)
有两种方式传递命名范围:
String
Range
对象因此工作表单元格中的 UDF()将具有:
=myudf("Name1")
或
=myudf(Name1)
当然,UDF()必须编码为期望其中一个,
请注意,仅使用String
可能存在波动性问题。
修改#1:强>
以下是传递Range
而不是String
的示例。假设我们创建MyRange1
,如:
和 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()具有范围,它就可以获得其中包含的项目列表。
答案 1 :(得分:0)
要找出类似的问题,您可以在代码中放置一个断点并分析Locals窗口:
在“本地”窗口中,您可以注意到您可以访问" Str2"与nameDefined(2,1)
(或在您的Excel版本中,水平数组可能为nameDefined(2)
)
您还可以使用某些VBA函数检查运行时类型:
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 )