如何从vba中的用户定义函数返回范围对象

时间:2011-09-10 12:02:50

标签: function vba object range

我在excel中有这段代码:

Private Function RelCell(NmdRng as String) as Range
Set RelCell = Range(NmdRng).Cells(1,1)
End Function

它给出了运行时错误“91”:对象变量或未设置块变量。

我真的不知道我的功能有什么问题..有人吗?

4 个答案:

答案 0 :(得分:0)

我不知道这是不是问题,但是你只是设置范围并且没有从函数中返回任何内容。

尝试将具有不同名称的范围变量声明为函数并返回该值。

答案 1 :(得分:0)

实际上,您应该能够按照此MSDN Thread中的说明从UDF返回范围。

以下是MVP给出的代码:

Function GetMeRange(rStartCell As Range, lRows As Long, iColumns As Integer) As Range
  Set GetMe = rStartCell.Resize(lRows, iColumns)  ' note the use of Set here since we are setting an object variable
End Function

(并且有效)

Tiago的评论指出了一个非常正确的事情,因为你想要访问一个命名的范围,它应该首先定义。
您可以尝试在UDF中设置断点,并查看是否已定义Range(NmdRng)

答案 2 :(得分:0)

您的指定范围已附加了一个单元格引用,因此您不需要在其末尾添加.Cells(1,1)

仅使用.Range(nmdRng)属性将返回您要查找的范围对象。

尝试:

Private Function RelCell(NmdRng as String) as Range
Set RelCell = Range("NmdRng")
End Function

答案 3 :(得分:0)

请重写您的代码并按如下方式进行测试:

Private Function RelCell(NmdRng as String) as Range
Dim TestRange As Range

Set TestRange=Range(NmdRng)
TestRange.Activate 'I think that error will occur here because, NmdRng is somehow invalid
Set RelCell = TestRange.Cells(1,1)
End Function