我正在尝试编写一个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"
答案 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。