我正在尝试复制数据行(可能会或可能不会被过滤)并将其插入到现有数据之上的行(滚动计划的排序)。下面是我的代码,适用于未过滤的数据。如果我对要复制的数据应用任何过滤器,我的宏将只复制1个单元格。任何人都可以提供一个可以复制过滤和未过滤数据的宏的示例吗?
onMediaButtonEvent()
答案 0 :(得分:1)
我已经重写了您的子程序,并试图避免使用.Select
和Selection
。依赖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。