隐藏在 VBA 中的多行

Posted

技术标签:

【中文标题】隐藏在 VBA 中的多行【英文标题】:Multiple rows hiding in VBA 【发布时间】:2020-12-14 03:28:27 【问题描述】:

我有一个 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

【问题讨论】:

【参考方案1】:

你最好指定你想要得到的结果;你强加的条件有优先权吗? 例如,在

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,3,2,1

【讨论】:

谢谢!这不太行。我会说事件的优先级是 R3=R2,然后是 R1,然后是 xRg

以上是关于隐藏在 VBA 中的多行的主要内容,如果未能解决你的问题,请参考以下文章

excel等于某个值自动 隐藏/显示 整行 求教VBA代码

如何使用VBA隐藏多列列表框中的列

VBA:如何找到同一行中的下一个单元格(不包括隐藏单元格)

在 TableView 中单击后隐藏行(多行)

根据 Excel VBA 中的 ComboBox 显示/隐藏 WBS 项目

在 VBA ODBC 中运行附加查询时隐藏对话框