将范围对象传递给excel-vba中的函数 - 收到“Object Required”错误

时间:2013-03-26 16:00:27

标签: excel vba excel-vba

我正在尝试构建一个函数,它将获取一个输入单元格(比如说“B5”)并返回一个引用表格的范围对象(其中提供的单元格是右上角的条目)

Sub Macro1()
Dim testCell As Range

testCell = Worksheets("HMA").Range("B5")
ReturnTable testCell

End Sub

Function ReturnTable(cell As Range)
    firstcell = cell
    lastrow = firstcell.End(x1Down)
    Table = Range(firstcell, lastrow + 5).Value
End Function

我在这里遇到了很多问题,我觉得我错过了一些简单的事情。我得到的错误是lastRow行的“Object Required”。

在调试模式下查看它我看到testCell被赋予了范围对象的值(我假设这是默认值)。我在这里错过了什么?

我的方法是否合理?我应该以不同的方式考虑解决这个问题吗?

2 个答案:

答案 0 :(得分:3)

End返回一个Range对象,因此,lastrow必须是范围变量。

Function ReturnTable(firstcell as Range) as Range 'add this as range to tell the result of the function is a range
    dim LastCell as Range
    Set LastCell = firstcell.END(xldown)
    Set ReturnTable = Range(firstcell, lastcell) 'must use the same name of the function
End Function

如果您想要lastcell,请使用LastCell.Offset(5,0)

在Macro1中,您可能需要类似

的内容
Set SomeVar = ReturnTable(testcell)

答案 1 :(得分:3)

分配对象(如范围)时,必须使用“设置”。

如果指定Range而没有“Set”,VBA将分配Range的值而不是Range本身。

Set testCell = Worksheets("HMA").Range("B5")