0

当 E 列中的单元格值等于 0(零)时,我试图自动隐藏/取消隐藏相应的行。这些单元格中有公式,当另一个单元格中的一个单元格发生更改时,这些公式返回零。在进行该更改后,我希望代码执行其隐藏/取消隐藏魔术。

非常感谢帮助。

4

2 回答 2

1

这是使用 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
于 2012-06-08T16:46:33.230 回答
0

使用这个方法:

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当某些单元格更改时,此方法将调用方法。

于 2012-06-08T12:56:02.760 回答