簡體   English   中英

在自動過濾器 Excel VBA 之后刪除隱藏/不可見行

[英]Delete Hidden/Invisible Rows after Autofilter Excel VBA

我想這很簡單,但由於某種原因,它似乎對我不起作用:(

我有以下代碼,它根據我指定的條件自動過濾數據:

Dim lastrow As Long
lastrow = Sheet2.Cells(Sheet2.Rows.Count, "A").End(xlUp).Row

With Sheet2
    .AutoFilterMode = False

    With .Range("A1:AF" & lastrow)
    .AutoFilter
    .AutoFilter Field:=7, Criteria1:="Yes", Operator:=xlFilterValues

    End With

我現在要做的是刪除所有不符合條件的未過濾(隱藏)行。

到目前為止我嘗試過:

Sub RemoveHiddenRows 
Dim oRow As Object 
For Each oRow In Sheets("Sheet2").Rows 
If oRow.Hidden Then oRow.Delete 
Next 
End Sub 

但是此代碼的問題在於,它只會刪除每隔一行的連續隱藏行,因為即使刪除了一行並且所有較低的行都向上移動了,每個行都會增加所考慮的行。

如果可能的話,我更喜歡沒有循環的東西,有點像.SpecialCells .SpecialCells(xlCellTypeVisible).EntireRow.Delete

所有幫助將不勝感激。

因此,我有點想要擺脫未過濾的數據,而不是試圖扭轉所有標准並刪除可見的單元格

我會用這個:

Sub RemoveHiddenRows()
    Dim oRow As Range, rng As Range
    Dim myRows As Range
    With Sheets("Sheet3")
        Set myRows = Intersect(.Range("A:A").EntireRow, .UsedRange)
        If myRows Is Nothing Then Exit Sub
    End With

    For Each oRow In myRows.Columns(1).Cells
        If oRow.EntireRow.Hidden Then
            If rng Is Nothing Then
                Set rng = oRow
            Else
                Set rng = Union(rng, oRow)
            End If
        End If
    Next

    If Not rng Is Nothing Then rng.EntireRow.Delete
End Sub

我使用Dmitry Pavliv的解決方案為我的過濾表工作(謝謝!)但會間歇性地給出錯誤:“范圍類的刪除方法失敗”錯誤。

當只刪除一個隱藏行時,似乎發生錯誤。 單個隱藏行位於表頭下方可能有也可能沒有意義。

單步執行代碼,rng指向正確的單元格,並顯示單個單元格。 這可能是使用表而不是命名范圍的問題,盡管其他隱藏的行在相同的表格格式中被刪除了。

從我修改代碼的最后一部分后,宏一直正常工作:

If Not rng Is Nothing Then rng.EntireRow.Delete

對此:

If rng.Rows.Count = 1 Then
   ws.Rows(rng.Row & ":" & rng.Row).Delete
ElseIf rng Is Nothing Then
   rng.EntireRow.Delete
End If

出於某種原因,刪除此格式的單行有效。 我不太清楚為什么。 rng對象指向正確的單元格,我正在使用它來獲取行號,因此不確定為什么它在rng.entirerow.delete語句中不起作用。 那好吧。 許多帖子共享時遇到相同的錯誤未解決。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM