将名称管理器Excel中创建的名称传递给函数VBA

时间:2016-09-16 14:32:40

标签: excel vba excel-vba

我在名称管理器中创建了一个名称。如何传递名称" MyRange1"我的函数在VBA代码中的参数?

在Excel中:

=MyFunction(MyRange1)

MyFunction是:

Public Function MyFunction(nameDefined As Variant) As String
    'How get value of nameDefined ??
End Function

2 个答案:

答案 0 :(得分:2)

两种方式传递命名范围:

  1. 作为String
  2. 作为Range对象
  3. 因此工作表单元格中的 UDF()将具有:

    =myudf("Name1")
    

    =myudf(Name1)
    

    当然,UDF()必须编码为期望其中一个,

    请注意,仅使用String可能存在波动性问题。

    修改#1:

    以下是传递Range而不是String的示例。假设我们创建MyRange1,如:

    enter image description here

    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)
    

    enter image description here

    一旦 UDF()具有范围,它就可以获得其中包含的项目列表。

答案 1 :(得分:0)

要找出类似的问题,您可以在代码中放置一个断点并分析Locals窗口:

enter image description here

在“本地”窗口中,您可以注意到您可以访问" 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 )