从过滤数据复制行并插入现有数据

时间:2016-01-11 23:46:46

标签: excel excel-vba vba

我正在尝试复制数据行(可能会或可能不会被过滤)并将其插入到现有数据之上的行(滚动计划的排序)。下面是我的代码,适用于未过滤的数据。如果我对要复制的数据应用任何过滤器,我的宏将只复制1个单元格。任何人都可以提供一个可以复制过滤和未过滤数据的宏的示例吗?

onMediaButtonEvent()

1 个答案:

答案 0 :(得分:1)

我已经重写了您的子程序,并试图避免使用.SelectSelection。依赖ActiveCell¹ActiveSheet¹这样的属性充其量是偶然的。

Sub DynamicRange()
    Dim sc As Range, sht As Worksheet

    Set sht = ActiveWorkbook.Worksheets("Sheet1")  '<~~ set this worksheet reference properly
    'btw, if you really needed ActiveWorkbook here then you would need it with Worksheets("TRACKER") below.

    With sht
        Set sc = .Range("C9")   'don't really have a use for this
        If IsEmpty(.Range("C9")) Then
          MsgBox "Enter Dates to export"
          Exit Sub
        End If
        With .Range(.Cells(9, 3), .Cells(9, Columns.Count).End(xlToLeft))
            With Range(.Cells(1, 1), .Cells(Rows.Count, .Columns.Count).End(xlUp))
                'got the range; determine non-destructively if anything is there
                If CBool(Application.Subtotal(103, .Cells)) Then
                    'there are visible values in the cells
                    .Cells.Copy _
                      Destination:=Worksheets("TRACKER").Cells(Rows.Count, 2).End(xlUp).Offset(1, 0)
                End If
            End With
        End With
    End With

End Sub

工作表的SUBTOTAL function不计算隐藏值,因此对于可见值的存在是一个很好的非破坏性测试。您无需专门使用Range.SpecialCells复制xlCellTypeVisible property。常规Range.Copy method只会复制可见的单元格。通过立即指定目标,无需将ActiveSheet属性传输到 TRACKER 工作表;只需要指定目的地的左上角。

¹有关远离依赖选择和激活以实现目标的更多方法,请参阅How to avoid using Select in Excel VBA macros