Excel VBA宏将过滤后的数据复制并粘贴到新图纸

Excel VBA宏将过滤后的数据复制并粘贴到新图纸,excel,vba,Excel,Vba,我试图将过滤后的数据从一张工作表复制到另一张工作表,但由于某些原因,我得到一个运行时错误1004,上面说“要将另一张工作表中的所有单元格复制到此工作表,请确保将它们粘贴到第一个单元格(A1或R1C1)”我实际上不希望复制标题行,因此所有可见的单元格都将显示在该行中 我想要的是将复制的数据粘贴到目标工作表中的第一个可用行。下面是我的代码,它对某些东西进行过滤,但在粘贴行中失败 Sub BBWin() ' ' BB Win Macro ' This macro will filter BB Win

我试图将过滤后的数据从一张工作表复制到另一张工作表,但由于某些原因,我得到一个运行时错误1004,上面说“要将另一张工作表中的所有单元格复制到此工作表,请确保将它们粘贴到第一个单元格(A1或R1C1)”我实际上不希望复制标题行,因此所有可见的单元格都将显示在该行中

我想要的是将复制的数据粘贴到目标工作表中的第一个可用行。下面是我的代码,它对某些东西进行过滤,但在粘贴行中失败

Sub BBWin()
'
' BB Win Macro
' This macro will filter BB Win 1 - 8
'
    With ActiveSheet.Range("A1").CurrentRegion
      With .Resize(, .Columns.Count + 1)
         With .Cells(2, .Columns.Count).Resize(.Rows.Count - 1)
            .FormulaR1C1 = "=if(or(rc7={""K.BB_Win_1_2019"",""K.BB_Win_2_2019"",""K.BB_Win_3_2019"",""K.BB_Win_4_2019"",""K.BB_Win_5_2019"",""K.BB_Win_6_2019"",""K.BB_Win_7_2019"",""K.BB_Win_8_2019""}),""X"","""")"
            .Value = .Value
         End With
         .HorizontalAlignment = xlCenter
      End With
        Cells.Select
        Selection.SpecialCells(xlCellTypeVisible).Copy
        Workbooks("Predictology-Reports.xlsx").Sheets("BB Reports").Range("A" & Rows.Count).End(xlUp).Offset(1).PasteSpecial xlPasteValues
    End With
    Application.CutCopyMode = False
End Sub
有没有什么建议可以让它正常工作

=========================================

好的,也许我应该用另一种方式尝试这个问题,发布我提供的原始工作宏,而不是发布我试图重写它的尝试

这基本上与我上面发布的内容相同,公式更改为查找不同的文本,不过它也有自动筛选设置(我不需要)和隐藏列(我不需要)。这对我来说非常有效,而且完全符合我的要求。我基本上试图复制它并删除不需要的元素,但正如您所看到的,我发现了最初指出的错误。显然,我有限的知识导致了最初的问题

Sub Low_Risk()
'
' Low Risk Lays Macro
' This macro will filter for Remove VDW Rank 1, Class, Distance <=1650, # of Runners <=9, Exclude Brighton, Yarmouth, Windsor & Wolverhampton
'
    With ActiveSheet.Range("A1").CurrentRegion
      With .Resize(, .Columns.Count + 1)
         With .Cells(2, .Columns.Count).Resize(.Rows.Count - 1)
            .FormulaR1C1 = "=if(or(rc8={""Brighton"",""Yarmouth"",""Windsor"",""Wolverhampton""}),""X"","""")"
            .Value = .Value
         End With
         .AutoFilter Field:=4, Criteria1:="<=9"
         .AutoFilter Field:=11, Criteria1:="<=1650"
         .AutoFilter .Columns.Count, "<>X"
         .AutoFilter Field:=29, Criteria1:="<>1"
         .HorizontalAlignment = xlCenter
      End With
        .Columns("C:C").EntireColumn.Hidden = True
        .Columns("G:G").EntireColumn.Hidden = True
        .Columns("I:I").EntireColumn.Hidden = True
        .Columns("L:L").EntireColumn.Hidden = True
        .Columns("N:W").EntireColumn.Hidden = True
        .Columns("Y:AB").EntireColumn.Hidden = True
        .Columns("AD:AJ").EntireColumn.Hidden = True
        .Columns("AO:AO").EntireColumn.Hidden = True
        .Columns("AQ:BQ").EntireColumn.Hidden = True
        .Columns("BT:CP").EntireColumn.Hidden = True
        .Parent.AutoFilter.Range.Offset(1).Copy
        Workbooks("New Results File.xlsm").Sheets("Low Risk Lays").Range("A" & Rows.Count).End(xlUp).Offset(1).PasteSpecial xlPasteValues
    End With
    Application.CutCopyMode = False
End Sub
次低风险()
'
"低风险是宏观的"

'此宏将筛选删除VDW秩1、类、距离
单元格。选择
将选择所有单元格

Selection.SpecialCells(xlCellTypeVisible)
保留所有单元格,因为没有隐藏任何内容,所有内容都是可见的。您说过“复制过滤数据”,但您的代码没有过滤任何内容

因此,没有地方粘贴所有单元格

要使代码正常工作,请替换
单元格。选择
.Cells。选择
(前面的点表示已调整大小的UsedRange)。即使不需要任何选择

因此,(最好)使用
.cells.SpecialCells(xlCellTypeVisible)。复制

已编辑

您的最后一个代码只需要复制筛选范围的可见单元格。那么,你的代码行

.Parent.AutoFilter.Range.Offset(1).Copy
必须由下一个替换:

.Parent.AutoFilter.Range.Offset(1).SpecialCells(xlCellTypeVisible).Copy


它指的是从第二行开始的处理范围('UsedRange')。

单元格。选择
选择所有单元格

Selection.SpecialCells(xlCellTypeVisible)
保留所有单元格,因为没有隐藏任何内容,所有内容都是可见的。您说过“复制过滤数据”,但您的代码没有过滤任何内容

因此,没有地方粘贴所有单元格

要使代码正常工作,请替换
单元格。选择
.Cells。选择
(前面的点表示已调整大小的UsedRange)。即使不需要任何选择

因此,(最好)使用
.cells.SpecialCells(xlCellTypeVisible)。复制

已编辑

您的最后一个代码只需要复制筛选范围的可见单元格。那么,你的代码行

.Parent.AutoFilter.Range.Offset(1).Copy
必须由下一个替换:

.Parent.AutoFilter.Range.Offset(1).SpecialCells(xlCellTypeVisible).Copy

它指的是从第二行开始的处理范围('UsedRange')。

单元格。选择
(没有前导周期将其绑定到带
块的
)将选择活动工作表上的所有单元格

试试这个(嵌套的有点让我困惑,所以删除了一对)

单元格。选择
(没有前导周期将其绑定到带有
块的
)将选择活动工作表上的所有单元格

试试这个(嵌套的有点让我困惑,所以删除了一对)

我想要的是将复制的数据粘贴到第一个 目标工作表中的可用行

您应该定义要粘贴填充行的可用行,或要粘贴过滤数据的工作表中的第一个空白行。然后,您将能够将数据粘贴到该行中

在我的示例中,我通过第24列中包含“P24128”的任何内容过滤数据工作表(源工作表),并粘贴到“Sheet8”(目标工作表),在我的示例中

实际上我不想复制标题行,所以所有可见的条 划船

您也不需要标题。:)

不包括标题的内容是:

   ws.AutoFilter.Range.Copy 'copy the AutoFilter first
   Set Rng = ws.UsedRange.Offset(1, 0)
   Set Rng = Rng.Resize(Rng.Rows.Count - 1)
   Rng.Copy
&您的目标是在激活目标工作表并找到其最后一行之后

lr = ThisWorkbook.Worksheets("Sheet8").Cells(1, 1).SpecialCells(xlCellTypeLastCell).Row + 1
我想要的是将复制的数据粘贴到第一个 目标工作表中的可用行

您应该定义要粘贴填充行的可用行,或要粘贴过滤数据的工作表中的第一个空白行。然后,您将能够将数据粘贴到该行中

在我的示例中,我通过第24列中包含“P24128”的任何内容过滤数据工作表(源工作表),并粘贴到“Sheet8”(目标工作表),在我的示例中

实际上我不想复制标题行,所以所有可见的条 划船

您也不需要标题。:)

不包括标题的内容是:

   ws.AutoFilter.Range.Copy 'copy the AutoFilter first
   Set Rng = ws.UsedRange.Offset(1, 0)
   Set Rng = Rng.Resize(Rng.Rows.Count - 1)
   Rng.Copy
&您的目标是在激活目标工作表并找到其最后一行之后

lr = ThisWorkbook.Worksheets("Sheet8").Cells(1, 1).SpecialCells(xlCellTypeLastCell).Row + 1

您需要rng.Offset(1,0).SpecialCells(xlCellTypeVisible).Copy为op提供不带标题的选择。@SpyrosTzortzis-谢谢,我错过了那篇文章。Cheers@Tim Williams很遗憾,它要么没有过滤所需的文本,要么复制了所有内容,因为粘贴的是源代码表中的每个条目。当我发布我的代码时,您的问题没有包含筛选,所以我假设它已经被筛选。添加了一些筛选。您需要rng.Offset(1,0)。SpecialCells(xlCellTypeVisible).Copy为op提供不带标题的选择。@SpyrosTzortzis-谢谢我错过了那篇文章。Cheers@Tim Williams不幸的是,它要么没有过滤所需的文本,要么复制了所有内容,因为粘贴的是源表中的每个条目。当我发布