VBA - 在自动过滤后复制数据时出错

时间:2016-01-12 16:14:45

标签: excel vba excel-vba

我正在尝试编写一个VBA代码,该代码将根据A列过滤工作表“新业务数据”中的报表。然后,它应该将列B中的结果粘贴到工作表“新销售”中的列K 但是,只有部分数据通过,因为列C-J中可能有一些空单元格。我知道问题在于Range(选择...)但不确定如何纠正

'Stage 6
Sheets("New Sales").Select
Range("B1").End(xlDown).Offset(1, 0).Select
ActiveCell.FormulaR1C1 = "Accounts Live - Stage 6"

Sheets("New Business Data").Select
ActiveSheet.Range("$A$1:$K$122").AutoFilter Field:=1, Criteria1:= _
    "Stage 6 - Live"
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Sheets("New Sales").Select
Range("B1").End(xlDown).Offset(1, 0).Select
ActiveSheet.Paste
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False

Range("B1").End(xlDown).Offset(1, 0).Select
ActiveCell.FormulaR1C1 = "Total"

1 个答案:

答案 0 :(得分:1)

这应该有助于清理你的代码。我选择仅粘贴新业务数据工作表的A:K中的过滤值。

Sub stage_6()

    'Stage 6
    With Worksheets("New Sales")
        .Range("B1").End(xlDown).Offset(1, 0) = "Accounts Live - Stage 6"
    End With

    With Worksheets("New Business Data")
        With .Range("$A$1").CurrentRegion
            With .Resize(.Rows.Count, 11)
                .AutoFilter Field:=1, Criteria1:="Stage 6 - Live"
                .Copy Destination:=Worksheets("New Sales").Range("B1").End(xlDown).Offset(1, 0)
            End With
        End With
        .Range("B1").End(xlDown).Offset(1, 0) = "Total"
    End With

End Sub

这应该让您开始编写代码,避免使用.Select和`.Activate。

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