2017-08-16 48 views
0

中的几个潜艇的功能一直试图获得LastRow在一个问题,我可以在同一个模块中的几个代码中使用它。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 

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

+0

你总是希望到f列A列中的第一个空格?或者你想查找列A中最后使用的单元格?或者你是否试图在所有列中查找最后使用的行? – Olly

+3

尝试'getLastRow = endrow'而不是'getLastRow = LRow'。 – Mrig

+0

@绝对是的。但可能不如'... End(xlUp)',但是这样做是因为它们从来没有位于第11行的空单元格 – krib

回答

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..... 
+0

这个窍门,比我第一次尝试好一点,并没有搞乱我隐藏的滤波器。 thx – krib

+0

我添加了另一个选项,因为我不喜欢需要输入的'ActiveSheet'。 – CLR

+0

甜。那很棒。 – krib