Worksheet_Change在Excel中隐藏行

我有一个macros应该隐藏在Excel中当一个给定的单元格的值是“ODD”(单词,而不是一个奇数)的行。 我已经尝试了两种不同的格式。 既不会给出任何明显的错误,也不会隐藏行。

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 

它是从一个更先进的案件陈述进行修改,我刚刚离开了这个方法。

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比较已经产生了TrueFalse ,所以可以省去If/Else/End If 。 VBA中的文本比较通常是区分大小写的,因此需要UCase强制区分大小写。

您缺less一个关键的代码行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存储在您要执行的工作表的工作表模块中。 那么你的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...放在一行上,它实际上closures了If (没有End If需要的话)。另外,我翻转了你的True和False语句以符合你的要求。