兩種方式我能想到的:
週期的每一行,並設置隱藏屬性。
由於代碼在ToggleButton後面,我們不需要指定表名。代碼將在當前活動工作表上運行,這是正確的工作表,因爲您已按下ToggleButton。
由於ToggleButton返回TRUE或FALSE,我們可以將隱藏屬性設置爲該值。
Private Sub ToggleButton1_Click()
Dim rDataRange As Range
Dim rCell As Range
'Set rDataRange = Range("A2", Cells(Rows.Count, 1).End(xlUp))
'Take into account hidden rows:
Set rDataRange = Range("A2", HiddenLastCell(ActiveSheet))
For Each rCell In rDataRange
If rCell = "Admin" Then
Rows(rCell.Row).EntireRow.Hidden = ToggleButton1
End If
Next rCell
End Sub
設置在rDataRange
範圍內使用此功能找到的最後一個單元格,即使它是隱藏的:
Public Function HiddenLastCell(wrkSht As Worksheet) As Range
Dim rLastCell As Range
Dim bHasHiddenData As Boolean
Dim rSearch As Range
Dim lLastCol As Long, lLastRow As Long
Dim lRow As Long
With wrkSht
Set rLastCell = .Columns(1).Find("*", , , , xlByColumns, xlPrevious)
If Not rLastCell Is Nothing Then
bHasHiddenData = rLastCell.Row <> .UsedRange.Rows.Count
Else
bHasHiddenData = .UsedRange.Rows.Count > 1
End If
If bHasHiddenData Then
Set rSearch = .Range(.Cells(1, 1), .Cells(.UsedRange.Row + .UsedRange.Rows.Count - 1, 1))
For lRow = rSearch.Rows.Count + 1 To 2 Step -1
If .Cells(lRow, 1) = vbNullString And .Cells(lRow - 1, 1) <> vbNullString Then
Set HiddenLastCell = .Cells(lRow, 1)
End If
Next lRow
Else
On Error Resume Next
lLastCol = .Cells.Find("*", , , , xlByColumns, xlPrevious).Column
lLastRow = .Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row
If lLastCol = 0 Then lLastCol = 1
If lLastRow = 0 Then lLastRow = 1
Set HiddenLastCell = wrkSht.Cells(lLastRow, lLastCol)
On Error GoTo 0
End If
End With
End Function
使用自動篩選隱藏行。
這個代碼添加到按鈕:
Private Sub ToggleButton1_Click()
FilterAdmin ToggleButton1.Value
End Sub
此代碼將應用或刪除過濾器:
Sub FilterAdmin(ToggleOn As Boolean)
Dim rDataRange As Range
Dim rLastCell As Range
With ThisWorkbook
If ToggleOn Then
Set rLastCell = LastCell(.Worksheets("Sheet1"))
With .Worksheets("Sheet1")
'Get reference to data range (A1 to last used cell).
'Or you can manually set the range.
Set rDataRange = .Range(.Cells(1, 1), rLastCell)
'If auto-filter isn't turned on then turn it on.
If Not .AutoFilterMode Then rDataRange.AutoFilter
'Remove any applied filters.
If .FilterMode Then .ShowAllData
rDataRange.AutoFilter Field:=1, Criteria1:="<>Admin", Operator:=xlAnd
End With
Else
If .Worksheets("Sheet1").FilterMode Then .Worksheets("Sheet1").ShowAllData
End If
End With
End Sub
該函數將返回一個包含數據和在上述過程中使用的最後一個單元:
Public Function LastCell(wrkSht As Worksheet, Optional Col As Long = 0) As Range
Dim lLastCol As Long, lLastRow As Long
On Error Resume Next
With wrkSht
If Col = 0 Then
lLastCol = .Cells.Find("*", , , , xlByColumns, xlPrevious).Column
lLastRow = .Cells.Find("*", , , , xlByRows, xlPrevious).Row
Else
lLastCol = .Cells.Find("*", , , , xlByColumns, xlPrevious).Column
lLastRow = .Columns(Col).Find("*", , , , xlByColumns, xlPrevious).Row
End If
If lLastCol = 0 Then lLastCol = 1
If lLastRow = 0 Then lLastRow = 1
Set LastCell = wrkSht.Cells(lLastRow, lLastCol)
End With
On Error GoTo 0
End Function
您可以更改代碼中的工作表參考,以使用ActiveSheet
而不是Sheet1
(同樣,按下切換按鈕時,正確的工作表將被激活)。
只需使用'IF'與'Row.Hidden'。循環行;看看該行是否包含「Admin」,如果有,則將該行設置爲「Hidden」。你可以使用按鈕來觸發宏。 –