当 E 列中的单元格值等于 0(零)时,我试图自动隐藏/取消隐藏相应的行。这些单元格中有公式,当另一个单元格中的一个单元格发生更改时,这些公式返回零。在进行该更改后,我希望代码执行其隐藏/取消隐藏魔术。
非常感谢帮助。
这是使用 AutoFilter 的更快方法。您可以直接调用此代码或在Worksheet_Calculate
事件中使用它。我假设单元格E1
有标题。
一键式
Option Explicit
Sub Sample()
Dim rRange As Range, RngToHide As Range
Dim lRow As Long
'~~> Remove any filters
ActiveSheet.AutoFilterMode = False
With Sheets("Sheet1")
lRow = .Range("E" & Rows.Count).End(xlUp).Row
Set rRange = .Range("E1:E" & lRow)
With rRange
.AutoFilter Field:=1, Criteria1:="0"
Set RngToHide = .Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow
End With
End With
'~~> Remove any filters
ActiveSheet.AutoFilterMode = False
If Not RngToHide Is Nothing Then RngToHide.Hidden = True
End Sub
工作表计算事件 - 不推荐
我不建议自动调用此代码,因为如果您想更改隐藏行中的某些内容,这不会让您取消隐藏行。要取消隐藏行,您必须注释掉Worksheet_Calculate
事件中的整个代码,或者将连接单元格中的值更改为非零值(前提是连接的单元格不在隐藏行中)。
这将在 Col E 中的值更改为时隐藏该行0
Option Explicit
Private Sub Worksheet_Calculate()
Dim rRange As Range, RngToHide As Range
Dim lRow As Long
On Error GoTo Whoa
Application.ScreenUpdating = False
Application.EnableEvents = False
'~~> Remove any filters
ActiveSheet.AutoFilterMode = False
With Sheets("Sheet1")
lRow = .Range("E" & Rows.Count).End(xlUp).Row
Set rRange = .Range("E1:E" & lRow)
With rRange
.AutoFilter Field:=1, Criteria1:="0"
Set RngToHide = .Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow
End With
End With
'~~> Remove any filters
ActiveSheet.AutoFilterMode = False
If Not RngToHide Is Nothing Then RngToHide.Hidden = True
LetsContinue:
Application.ScreenUpdating = True
Application.EnableEvents = True
Exit Sub
Whoa:
MsgBox Err.Description
Resume LetsContinue
End Sub
使用这个方法:
Sub HideRows()
Dim i As Integer
i = 1
Do While Not Cells(i, 5) = ""
If Cells(i, 5).Value = 0 Then
Rows(CStr(i) + ":" + CStr(i)).EntireRow.Hidden = True
ElseIf Cells(i, 5).Value <> 0 And Rows(CStr(i) + ":" + CStr(i)).EntireRow.Hidden = True Then
Rows(CStr(i) + ":" + CStr(i)).EntireRow.Hidden = False
End If
i = i + 1
Loop
End Sub
您可以添加一个按钮并通过事件调用此方法或将下一个方法添加到Microsoft Excel 对象Button_Click
中的必要工作表
Private Sub Worksheet_Change()
Module1.HideRows
End Sub
HideRow
当某些单元格更改时,此方法将调用方法。