Worksheet_Change以隐藏Excel中的行

时间:2015-01-22 17:39:30

标签: excel vba hide

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

Sub Worksheet_Change(ByVal target As Range)

If target.Address <> "$B$2" 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

它是从更高级的案例陈述中修改过来的,我刚开始就是这样做的。

3 个答案:

答案 0 :(得分:0)

您缺少关键代码行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

答案 1 :(得分:0)

首先确保您的Change Sub存储在您希望执行此工作表的工作表模块中。然后,您的If语句会出现轻微的语法错误:

Private Sub Worksheet_Change(ByVal target As Range)

    If target is Nothing Then Exit Sub
    If target.Address <> "$B$2" 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语句以符合您在问题中的要求。

答案 2 :(得分:0)

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

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

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