Range = Range.Value方法传输可见单元格

时间:2015-08-10 22:25:51

标签: excel excel-vba vba

我知道复制和粘贴可见单元格方法(如下所示)但是,我希望使用范围= range.SpecialCells(xlVisible)的相同方法。这有可能吗?

    Sub tstsa()
        Dim lastrow As Long
        With Sheets2
        lastrow = .Range("Q1048576").End(xlUp).Row
        .Range("A1:Q" & lastrow).Cells.SpecialCells(xlVisible).Copy
        End With
        Sheet8.Range("a1").PasteSpecial xlPasteValues
    End Sub

1 个答案:

答案 0 :(得分:2)

Range.SpecialCells( xlCellTypeVisible)中的集合是Range.Areas的集合。这类似于您使用.Union不连续细胞所获得的结果。

Sub tstsa()
    Dim rws As Long
    With Sheet2
        With .Cells(1, 1).CurrentRegion.Cells
            With .Resize(.Rows.Count, 17)
                Debug.Print .SpecialCells(xlCellTypeVisible).Address(0, 0)
                Sheet8.Range("a1:q1") = .Rows(1).Cells.Value2
                For rws = 2 To .SpecialCells(xlVisible).Areas.Count
                    Sheet8.Cells(Rows.Count, 1).End(xlUp)(2).Resize(1, 17) = _
                      .SpecialCells(xlCellTypeVisible).Areas(rws).Cells.Value2
                Next rws
            End With
        End With
    End With
End Sub

在您的情况下,区域将是可见的过滤数据行(包括标题)。您需要循环遍历区域并将Range.ValueRange.Value2属性传递到Sheet8以进行直接价值转移。

如果行是连续的,则Area可以包含多行数据。我已离开Debug.Print,因此您可以在VBE的立即窗口中观察区域集合的地址。