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 进行比较已经产生了 True 或 False,您可以分配与 If/Else/End If
。 VBA 中的文本比较通常区分大小写,因此需要 UCase
强制不区分大小写。
我有一个宏,当给定单元格的值为 "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 进行比较已经产生了 True 或 False,您可以分配与 If/Else/End If
。 VBA 中的文本比较通常区分大小写,因此需要 UCase
强制不区分大小写。