2

我正在尝试构建一个函数,该函数将采用输入单元格(例如“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 行的“需要对象”。

在调试模式下查看它,我看到 testCell 被分配了范围对象的值(我假设这是默认值)。我在这里想念什么?

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

4

2 回答 2

4

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 下面的 5 个单元格,请使用LastCell.Offset(5,0)

在 Macro1 中,你可能会想要类似的东西

Set SomeVar = ReturnTable(testcell)
于 2013-03-26T16:14:30.377 回答
3

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

如果您在没有“设置”的情况下分配 Range,VBA 将分配 Range 的值而不是 Range 本身。

Set testCell = Worksheets("HMA").Range("B5")
于 2013-03-26T16:15:35.927 回答