在Excel VBA中隱藏多行

在Excel VBA中隱藏多行

我試圖隱藏 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”。

為了使程式碼運行得更快,不要在檢測到行時隱藏它們,而是建立一個RangeRanges隱藏的行,然後一次隱藏它們。

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或 的所有行。xxA

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

最好的問候
馬蒂亞斯

相關內容