VBA中隐藏了多行

问题描述

我有一个Excel工作表,我试图将多个条件隐藏起来。如果特定单元格等于0,则其中2个隐藏行;如果特定单元格具有特定单词,则其中之一隐藏行;如果特定列中为零,则最后隐藏行。当我分别进行操作时,它似乎可以工作,但是我似乎无法使其一起工作。某些行可能包含多个条件。请注意,我是新手。

这是我尝试过的:

Sub Worksheet_Change(ByVal Target As Range)

Dim xRg As Range
Dim R2 As Range
Dim R3 As Range
Dim R1 As Range
    


Set R1 = Union(Rows("61:61"),Rows("68:69"),Rows("72:72"),Rows("91:106"),Rows("117:125"),Rows("144:155"),Rows("157:158"),Rows("164:164"),Rows("166:166"))
Set R2 = Union(Rows("49:52"),Rows("65:129"))
Set R3 = Union(Rows("53:57"),Rows("130:161"))



Application.ScreenUpdating = False

    For Each xRg In Range("E8:E153")
            If xRg.Value = 0 Then
                xRg.EntireRow.Hidden = True
            Else
                xRg.EntireRow.Hidden = False
            End If
        Next xRg


    If Range("E$15").Value = 0 Then
    
       R3.EntireRow.Hidden = True
        Else
        R3.EntireRow.Hidden = False
    End If
      
    If Range("E$14").Value = 0 Then
    
       R2.EntireRow.Hidden = True
        Else
        R2.EntireRow.Hidden = False
    End If
    
        
    If Range("B$3").Value = "USD" Then
        R1.EntireRow.Hidden = True
        Else
        R1.EntireRow.Hidden = False
    End If

        
  Application.ScreenUpdating = True
End Sub

解决方法

您最好指定要获得的结果;您施加的条件是否优先? 例如,

Range("E$15") = 0

xRg.Value = 0

哪个应该占主导地位?

尝试逆转说明

Sub Worksheet_Change(ByVal Target As Range)

    Dim xRg As Range
    Dim R2 As Range
    Dim R3 As Range
    Dim R1 As Range

    Set R1 = Union(Rows("61:61"),Rows("68:69"),Rows("72:72"),Rows("91:106"),Rows("117:125"),Rows("144:155"),Rows("157:158"),Rows("164:164"),Rows("166:166"))
    Set R2 = Union(Rows("49:52"),Rows("65:129"))
    Set R3 = Union(Rows("53:57"),Rows("130:161"))
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    R3.EntireRow.Hidden = Range("E$15") = 0
    R2.EntireRow.Hidden = Range("E$14") = 0
    R1.EntireRow.Hidden = Range("B$3") = "USD"
    For Each xRg In Range("E8:E153")
        xRg.EntireRow.Hidden = xRg.Value = 0
    Next xRg
    Application.EnableEvents = True
    Application.ScreenUpdating = True
    
End Sub

PS:使用if..then构造将布尔值分配给布尔变量并没有多大意义。

然后,您必须首先评估优先级最低的条件,然后评估优先级最高的条件。

优先级:1,2,3,4

代码:4,1