VBA – 在自动筛选后复制数据时遇到问题

我正在尝试编写一个VBA代码,它将根据A列在“新build业务数据”表中过滤报表。然后,它应该将列B中的结果粘贴到“新build销售额”表中的K列。但是,只有部分数据正在通过,因为CJ列中可能有一些空单元格。 我知道问题是与范围(select…),但不知道如何纠正

'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" 

这应该有助于清理你的代码。 我select只将“ 新build商户数据”工作表的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的代码。


¹ 请参阅如何避免使用在Excel VBAmacros中select更多的方法来摆脱依靠select和激活来实现您的目标。