我试图隐藏 A 列中包含值“xx”的所有行,而不隐藏 A 列中包含“a”的行。范围是 A8:A556。此宏需要通过单元格 C4 中的更改来触发。
知道为什么它不起作用吗?这是当前的尝试:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(True, True) = "$C$4" Then
If Range("A8:A555").Value = "xx" Then
Rows("8:555").EntireRow.Hidden = True
ElseIf Range("A8:A555").Value = "a" Then
Rows("8:555").EntireRow.Hidden = False
End If
End If
End Sub
谢谢!
编辑:
嘿 Fixer1234,详细信息如下:
- 如果宏正常工作,“xx”和“a”可能不会同时存在。
- 仅“xx”行必须隐藏
- “xx”值不能与无法隐藏的值组合。
- “a”值不与必须隐藏的值组合。
- 还有其他不包含“xx 或“a”的行不需要隐藏(我应该在这些列中添加“a”还是完全删除 IfElse?)。
- “xx”行包含其他公式,公式结果为空白意味着该行必须被隐藏。
- “a”行具有相同的公式,但它会产生结果并且不能被隐藏。
运行时错误‘13’:类型不匹配,然后调试转到第一个
If Range("A8:A555").Value = "xx" Then
答案1
您无法使用 测试范围内的所有值Range("A8:A555").Value = "xx"
。它将引发类型不匹配错误。
您需要循环遍历范围内的每个单元格并单独测试其是否Value
等于“xx”。
为了使代码运行得更快,不要在检测到行时隐藏它们,而是建立一个Range
要Ranges
隐藏的行,然后一次性隐藏它们。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim cel As Range
Dim RangeToHide As Range
'Test if Target is C4
If Not Intersect(Target, [C4]) Is Nothing Then
'Loop through each cell in range and test if it's "xx"
For Each cel In Range("A8:A555")
If cel = "xx" Then
If RangeToHide Is Nothing Then
'Initialise RangeToHide because Union requires at least 2 ranges
Set RangeToHide = cel
Else
'Add cel to RangeToHide
Set RangeToHide = Union(RangeToHide, cel)
End If
End If
Next
RangeToHide.EntireRow.Hidden = True
End If
End Sub
答案2
使用此 VBA 代码作为标准模块,将帮助您隐藏列中具有XX
或的所有行。xx
A
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(True, True) = "$C$4" Then
Dim i As Integer
Application.ScreenUpdating = False
For i = 8 To 255
If Sheets("Sheet1").Range("A" & i).Value = "XX" Or Sheets("Sheet1").Range("A" & i).Value = "xx" Then
Rows(i & ":" & i).EntireRow.Hidden = True
End If
Next i
End If
Application.ScreenUpdating = True
End Sub
注意:
无需使用任何代码来取消隐藏具有a
或 的行A
,因为已经是可见的。最重要的是,使用的代码隐藏了 列 中的特定行A
。
答案3
我该如何隐藏单独的行?
我的想法是这样的:
Private Sub CheckBox1_Click()
If CheckBox1 = False Then
[15:15].EntireRow.Hidden = True
[3:3].EntireRow.Hidden = True
Else
[15:15].EntireRow.Hidden = False
[3:3].EntireRow.Hidden = False
End If
致以最诚挚的问候
Mattias