簡體   English   中英

SpecialCells(xlCellTypeVisible)選擇整個工作表

[英]SpecialCells(xlCellTypeVisible) choose the whole worksheet

很抱歉,這個問題不清楚。 這是來自Error的示例, 當我使用AutoFilter的SpecialCells來獲取VBA中的可見單元格時更改了代碼:

Sub Sample():
    ActiveSheet.AutoFilterMode = False

    Dim rRange As Range
    Dim Rnge As Range
    Dim last_Row As Integer

    Set rRange = Sheets("Sheet1").Range("A1:F6")

    '~~> Filter,
    With rRange
      .AutoFilter Field:=1, Criteria1:="=1"
    End With

    last_Row = Workbooks("Book1").Sheets("Sheet1").Range("A1048576").End(xlUp).Row

      '~~> Offset(to exclude headers)
    Set Rnge = Range("A2:A" & last_Row).SpecialCells(xlCellTypeVisible)

    Debug.Print Rnge.Address
    Debug.Print last_Row

End Sub

樣本數據:

Number1 Number2 Number3 Number4 Number5 Number6
1       1       1       1       1       1
2       2       2       2       2       2
3       3       3       3       3       3
4       4       4       4       4       4
5       5       5       5       5       5

如果我將條件設置為2,則debug.print將給我row3。 但是,如果我將條件設置為1。它將返回$ 1:$ 2,$ 7:$ 1048576 2.發生了什么?

這是在單個第一行上嘗試.SpecialCells(xlCellTypeVisible)時的已知問題.SpecialCells(xlCellTypeVisible) last_row為2時,您的范圍是Range("A2:A2") )。 如果從單行過濾的數據中設置.SpecialCells(xlCellTypeVisible,則它包括過濾范圍之外的數據范圍;如果在過濾前設置了last_row ,則假設您要啟動的數據多於一行,則將獲得正確的結果用。

    last_Row = Sheets("Sheet1").Range("A" & rows.count).End(xlUp).Row
    Set rRange = Sheets("Sheet1").Range("A1:F" & last_Row)

    '~~> Filter,
    With rRange
      .AutoFilter Field:=1, Criteria1:="=1"
    End With

我更喜歡嚴格地在要過濾的范圍內工作,並使用工作表函數.Subtotal來確定是否有任何要處理的單元格。

Sub Sample2()
    ActiveSheet.AutoFilterMode = False

    With Sheets("Sheet1").Cells(1, 1).CurrentRegion
        .AutoFilter
        .AutoFilter Field:=1, Criteria1:="=1"

        With .Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count)
            If Application.Subtotal(103, .Columns(1)) Then
                Debug.Print .Columns(1).SpecialCells(xlCellTypeVisible).Address(0, 0)
                Debug.Print .SpecialCells(xlCellTypeVisible).Rows.Count
            Else
                Debug.Print "no cells were found"
            End If
        End With

    End With
End Sub

.CurrentRegion返回包含A1的日期塊或日期島,直到遇到完全空白的行或列。 這與選擇A1並點擊Ctrl + A相同 通過嚴格地在CurrentRegion的范圍內工作(請記住在偏移時調整大小),可以避免范圍引用可能溢出到工作表的其余部分,在這些地方可見行將是工作表單元格的其余部分。

上面有一個知識庫白皮書,但很遺憾,我找不到它。

暫無
暫無

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

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