Excel 2011 VBA - 用于获取范围中最后一行的自定义函数

时间:2011-11-24 12:30:36

标签: excel vba

我一直在尝试各种方法来查找范围中的最后一行并将此数字返回到子程序,但无济于事。

这是我的代码

Sub StartHere()
    Dim oSheet As Worksheet
    Set oSheet = WorkSheets(1)
    ProcessData(oSheet)
End Sub

Sub ProcessData(ByVal wkst As Worksheet)
    Dim rng As Range
    Dim lastRow As Long

    'set range
    Set rng = wkst.Range("L:S") 'Range that i want to process data on

    'get the last row (in Long datatype)
    lastRow = CLng(getLastRowInRange(rng))

End Sub

Function getLastRowInRange(ByRef rng As Range)
    getLastRowInRange = rng.Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByRows,_ SearchDirection:=xlPrevious).Row
End Function

我一直在

上找到Type Mismatch
getLastRowInRange = rng.Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByRows,_ SearchDirection:=xlPrevious).Row

任何线索,伙计们?

1 个答案:

答案 0 :(得分:4)

ProcessData(oSheet)

Remove the parentheses

否则,您传递的是oSheet对象的默认属性的值,它没有。你应该得到“对象不支持这个属性或方法”。

执行此操作后,更改函数调用:

getLastRowInRange = rng.Cells.Find(What:="*", After:=rng.Cells(1), SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row

After必须属于搜索范围。 A1不属于L:S

最后,请确保在Find返回Nothing时暂时处理此情况(目前您还没有,请在返回的对象上调用.Row。)