将名称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 

两种方式来传递命名范围:

  1. 作为一个String
  2. 作为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 horizo​​ntal 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 )