LastRow作为模块中几个子函数的函数

时间:2017-08-16 10:53:02

标签: excel vba excel-vba

我试图在同一模块的多个代码中使用 LastRow

目前这就是我所得到的:

Function getLastRow() As Long

Dim LRow As Long
endrow = 11
Do Until Cells(endrow + 1, 1).Value = ""
    endrow = endrow + 1
Loop

getLastRow = LRow
End Function

该功能正在运行,但我在尝试使用它的行上获得了error 1004

Sub PPP()

Application.ScreenUpdating = False
Call Unprotect
    ActiveSheet.Range("$A$11:$AH$" & getLastRow).AutoFilter Field:=4, Criteria1:="PPP" '<--error occurs here
Call Protect
Application.ScreenUpdating = True

End Sub

感谢任何帮助,甚至是更好的解决方案。

1 个答案:

答案 0 :(得分:1)

这样可行:

Function getlastrow(sht As Worksheet, Optional columnindex As Long = 1) As Long
   getlastrow = sht.Cells(sht.Rows.Count, columnindex).End(xlUp).Row
End Function

您可以指定工作表名称或使用ActiveSheet。您也可以选择一个列,但如果没有给出,它将预先选择1,即A列。

你会这样使用它:

ActiveSheet.Range("$A$11:$AH$" & getLastRow(ActiveSheet)).AutoFilter.....

更好的是,如果没有预选,这个假定为ActiveSheet

Function getlastrow(Optional sht As Worksheet = Nothing, Optional columnindex As Long = 1) As Long
   If sht Is Nothing Then Set sht = ActiveSheet
   getlastrow = sht.Cells(sht.Rows.Count, columnindex).End(xlUp).Row
End Function

您可以根据原始代码使用它,如下所示:

ActiveSheet.Range("$A$11:$AH$" & getLastRow()).AutoFilter.....