2017-08-16 49 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