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

将在名称管理器Excel中创建的名称传递给函数VBA,vba,excel,Vba,Excel,我在名称管理器中创建了一个名称。如何在VBA代码中为我的函数传递名称“MyRange1”参数 在Excel中: =MyFunction(MyRange1) 我的职能是: Public Function MyFunction(nameDefined As Variant) As String 'How get value of nameDefined ?? End Function 通过命名范围有两种方法: 作为字符串 作为范围对象 因此,工作表单元格中的UDF()将具有: =myud

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

在Excel中:

=MyFunction(MyRange1)
我的职能是:

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

通过命名范围有两种方法:

  • 作为
    字符串
  • 作为
    范围
    对象
  • 因此,工作表单元格中的UDF()将具有:

    =myudf("Name1")
    

    当然,必须对UDF()进行编码以期望其中一个

    请注意,仅使用
    字符串可能存在波动性问题

    编辑#1:

    下面是传递
    范围而不是
    字符串的示例。假设我们创建
    MyRange1
    如下:

    UDF()类似于:

    然后我们可以在工作表单元格中使用它,如:

    =MyFunction(MyRange1)
    


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

    有两种方法可以通过命名范围:

  • 作为
    字符串
  • 作为
    范围
    对象
  • 因此,工作表单元格中的UDF()将具有:

    =myudf("Name1")
    

    当然,必须对UDF()进行编码以期望其中一个

    请注意,仅使用
    字符串可能存在波动性问题

    编辑#1:

    下面是传递
    范围而不是
    字符串的示例。假设我们创建
    MyRange1
    如下:

    UDF()类似于:

    然后我们可以在工作表单元格中使用它,如:

    =MyFunction(MyRange1)
    


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

    要解决类似问题,可以在代码中设置断点并分析“局部变量”窗口:

    从本地人窗口中,您可以注意到,您可以使用
    namefined(2,1)

    (或者在您的Excel版本中,对于水平数组,它可能是
    namefined(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 )
    

    要解决类似问题,可以在代码中设置断点并分析“局部变量”窗口:

    从本地人窗口中,您可以注意到,您可以使用
    namefined(2,1)

    (或者在您的Excel版本中,对于水平数组,它可能是
    namefined(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 )
    

    Range(“MyRange1”)
    @ScottCraner我在我的函数中没有通过
    Range(“MyRange1”)
    =MyFunction(Range(“MyRange1”))
    not work.=MyFunction(MyRange1)@charleswillams,如何在MyFunction中获得MyRange1的值?将名称作为字符串传递(因此变量是可以的)。在该函数体中,您使用
    Range()
    将传递的字符串转换为一个范围。
    Range(“MyRange1”)
    @ScottCraner我在我的函数中不传递
    Range(“MyRange1”)
    我的函数
    =MyFunction(Range(“MyRange1”)
    无效。=MyFunction(MyRange1)@charleswillams,如何在MyFunction中获取myRange1的值?您可以将名称作为字符串传递(所以变量是可以的)。在该函数体中,您使用
    Range()
    将传递的字符串转换为一个范围。“当然,必须对UDF()进行编码,以期望其中一个”或两个(在传递的参数上适当使用
    TypeName
    )。它可以工作,但如果
    myRange1
    是一个字符串列表?如何继续?@Ragnar你需要先弄清楚你的问题是什么。你的职能到底要完成什么?您正在传入一个
    变量
    ,它可以是从
    字符串
    单元格范围
    ,或者可以从Excel公式传递到函数的任何其他内容。只要我们不知道你想做什么,你的问题就不清楚。你无法获取“字符串列表”的“值”,这毫无意义。@Ragnar看到我的编辑了吗#1有帮助吗?@Gary的学生,是的。有可能将字符串放入
    引用的
    中,就像这样
    ={“Str1”;“Srt2”}
    ?“自然地,UDF()必须编码为期望其中一个”或两个(在传递的参数上适当地使用
    TypeName
    )。它可以工作,但是如果
    myRange1
    是一个srtring列表?如何继续?@Ragnar你需要先弄清楚你的问题是什么。你的职能到底要完成什么?您正在传入一个
    变量
    ,它可以是从
    字符串
    单元格范围
    ,或者可以从Excel公式传递到函数的任何其他内容。只要我们不知道你想做什么,你的问题就不清楚。你无法获取“字符串列表”的“值”,这毫无意义。@Ragnar看到我的编辑了吗#1有帮助吗?@Gary的学生,是的。可以将字符串放入
    引用的
    中,例如
    ={“Str1”;“Srt2”}