过滤数据和复制值VBA

我下面的代码应该是过滤wsData中的数据,然后将其复制到wsTest工作表中,在列A中相互之后。代码的工作原理除了它将值复制到目标工作表上的每个值之上而不是之后。 任何想法为什么?

Sub PrintReport() Dim wbFeeReport As Workbook Dim wsData As Worksheet Dim wsForm As Worksheet Dim wsTest As Worksheet Dim FrRngCount As Range Dim i As Integer Dim k As Integer Dim t As Integer Dim s As Integer Set wbFeeReport = Workbooks("FeExcForm.xlsm") Set wsData = wbFeeReport.Worksheets("Data") Set wsTest = wbFeeReport.Worksheets("Test") wsTest.Cells.Clear wsData.Activate i = 1 For k = 1 To 2 With ActiveSheet .AutoFilterMode = False With Range("A1", Range("A" & Rows.Count).End(xlUp)) .AutoFilter 1, k On Error Resume Next .SpecialCells(xlCellTypeVisible).Copy Destination:=wsTest.Range("A" & i) End With i = wsTest.Range("A" & Rows.Count).End(xlUp) .AutoFilterMode = False End With Next k End Sub 

作为第一点:如果使用AutoFilter的范围copy将始终排除隐藏的单元格

 With Range("A1", Range("A" & Rows.Count).End(xlUp)) .AutoFilter 1, k .Copy wsTest.Range("A" & i) End With 

这是你需要在这里。
关于你的错误: On Error Resume Next隐藏了i = wsTest.Range("A" & Rows.Count).End(xlUp) ,它将返回一个范围而不是数值。

 i = wsTest.Range("A" & Rows.Count).End(xlUp).Row + 1 

是你的朋友:)

一切都应该看起来像这样:

 Sub PrintReport() Dim wbFeeReport As Workbook Dim wsData As Worksheet Dim wsForm As Worksheet Dim wsTest As Worksheet Dim FrRngCount As Range Dim i As Integer Dim k As Integer Dim t As Integer Dim s As Integer Set wbFeeReport = Workbooks("FeExcForm.xlsm") Set wsData = wbFeeReport.Worksheets("Data") Set wsTest = wbFeeReport.Worksheets("Test") wsTest.Cells.Clear wsData.Activate i = 1 For k = 1 To 2 With wsData .AutoFilterMode = False With .Range("A1", Range("A" & Rows.Count).End(xlUp)) .AutoFilter 1, k .Copy wsTest.Range("A" & i) End With i = wsTest.Range("A" & Rows.Count).End(xlUp).Row + 1 .AutoFilterMode = False End With Next k End Sub 

编辑 :为了排除标题只是改变:

 .Copy wsTest.Range("A" & i) 

至:

 If i = 1 Then .Copy wsTest.Range("A" & i) Else .Offset(1, 0).Copy wsTest.Range("A" & i) 

如果你不需要任何头文件,那么直接使用:

 .Offset(1, 0).Copy wsTest.Range("A" & i) 

但我没有testing过。 只要告诉我,如果你有任何问题;)