我有一个宏,当给定单元格的值是" 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
它是从更高级的案例陈述中修改过来的,我刚开始就是这样做的。
答案 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
强制不区分大小写。