Worksheet_Change 隐藏 Excel 中的行

Worksheet_Change to hide rows in Excel

我有一个宏,当给定单元格的值为 "ODD"(单词,不是奇数)时,它应该在 excel 中隐藏一行。我尝试了两种不同的格式;既没有给出任何可见的错误,也没有隐藏该行。

Sub Worksheet_Change(ByVal target As Range)

If target.Address <> "$B" Then Exit Sub
    ElseIf Range("B2").Value = "ODD" Then
        Rows("5:5").EntireRow.Hidden = False
    Else
        Rows("5:5").EntireRow.Hidden = True
    End If
End If

End Sub

我的另一个代码是:

Select Case Range("B2").Value
    Case Is = "ODD": Rows("5:5").EntireRow.Hidden = False
    Case Else: Rows("5:5").EntireRow.Hidden = True
End Select

它是从更高级的 case 语句修改而来的,我一开始就这样保留了下来。

您缺少关键代码行If Not Application.Intersect(cell, Range(Target.Address)) Is Nothing Then尝试以下操作

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim cell   As Range
    Set cell = Range("B2")
    If Not Application.Intersect(cell, Range(Target.Address)) Is Nothing Then
        If Range("B2").Value = "ODD" Then
            Rows("5:5").EntireRow.Hidden = False
        Else
            Rows("5:5").EntireRow.Hidden = True
        End If
    End If
End Sub

首先确保您的 Change Sub 存储在您希望执行此操作的 Sheet 的工作表模块中。那么你的 If 语句有一个轻微的语法错误:

Private Sub Worksheet_Change(ByVal target As Range)

    If target is Nothing Then Exit Sub
    If target.Address <> "$B" Then Exit Sub
        If Range("B2").Value = "ODD" Then
            Rows("5:5").EntireRow.Hidden = True
        Else
            Rows("5:5").EntireRow.Hidden = False
        End If

End Sub

当你把 If...Then... 放在一行时,它实际上关闭了 If(不需要 End If)另外,我翻转了你的 True 和 False 语句以符合你的要求你的问题。

Rows("5:5") 会比 Rows(5) 更好。您使用的方法会更好 Range("5:5").

Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$B" Then
        Rows(5).EntireRow.Hidden = (UCase(Target.Value) = "ODD")
    End If
End Sub

由于将 B2 与 ODD 进行比较已经产生了 TrueFalse,您可以分配与 If/Else/End If。 VBA 中的文本比较通常区分大小写,因此需要 UCase 强制不区分大小写。