我試圖隱藏 A 列中包含值「xx」的所有行,而不隱藏 A 列中包含「a」的行。該巨集需要透過單元格 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 程式碼作為標準模組,將幫助您隱藏Column 中具有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
,因為已經可見。最重要的是,使用的程式碼隱藏了 Column 中的特定 Rows 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
最好的問候
馬蒂亞斯