将在名称管理器Excel中创建的名称传递给函数VBA
我在名称管理器中创建了一个名称。如何在VBA代码中为我的函数传递名称“MyRange1”参数 在Excel中:将在名称管理器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
=MyFunction(MyRange1)
我的职能是:
Public Function MyFunction(nameDefined As Variant) As String
'How get value of nameDefined ??
End Function
通过命名范围有两种方法:
字符串
范围
对象=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”}
?