VBA中的Excel过滤和复制

Posted

技术标签:

【中文标题】VBA中的Excel过滤和复制【英文标题】:Excel Filtering and Copying in VBA 【发布时间】:2012-12-07 00:01:59 【问题描述】:

我正在编写一个 VBA 脚本,该脚本从 Access 中提取一系列日期,然后过滤数据并根据过滤后的数据创建图表。过滤后的数据将转到一个单独的工作表,图表将从该工作表中提取其数据。我可以使用 SQL 语句从 Access 中获取数据,但我在 Excel 中的AutoFilter 出错了。这是我所拥有的......

Sheet3.Range("F4:F500").AutoFilter(, "Riveter 01").Copy Destination:=Sheet2.Range("A5")

它给出了一个应用定义或对象定义的错误,我不知道为什么。这是正确的方法还是有更简单的方法?

PS:这个过滤器将发生在 22 台不同的机器上,所以我计划为每台机器运行一个循环。如果这不是最快或正确的方法,请告诉我。

【问题讨论】:

【参考方案1】:

你需要把它分成两部分。过滤然后复制/粘贴。见下文:

With Sheet3
    .AutoFilterMode = False
    With .Range("F4:F500")
        .AutoFilter Field:=1, Criteria1:="Riveter 01"
        .SpecialCells(xlCellTypeVisible).Copy Destination:=Sheet2.Range("A5")
    End With
End With

删除过滤器:

On Error Resume Next
    Sheet3.ShowAllData
On Error GoTo 0

On Error Resume Next 适用于没有过滤器跳过错误的情况。请注意为寻求通用解决方案的人使用 Sheet3 和 Sheet2。

【讨论】:

此代码有效!我现在不确定的是a)为什么它从“F4”中获取单元格并复制它,因为它是一台不同的机器。当我更改范围时,它甚至复制了“F3”。 b) 如何抓取同一行中的数据(所以右边的两个单元格,抓取当天每台机器启动并运行的时间,然后复制它而不是机器名称。)谢谢你的帮助! 它需要 F4,因为它在您的范围内。要获取更多数据,请查看使用 Range 的 .CurrentRegion。您将需要创建一个更详细的新问题,因为它无法在 cmets 部分解决。包括数据、数据所在的行以及要复制的数据。 你如何删除过滤器? 添加到答案中。【参考方案2】:

我认为您必须分 2 个单独的步骤执行此操作:

    过滤数据 将过滤后的数据复制到另一个工作表

这里的答案有一个很好的例子来说明如何做到这一点:Autofilter Macro, then copy visible data ONLY and paste to next available row

【讨论】:

我已经尝试添加一个新的 Sub 并修改该代码,但我仍然收到 1004 应用程序定义或对象定义的错误。

以上是关于VBA中的Excel过滤和复制的主要内容,如果未能解决你的问题,请参考以下文章

使用 VBA 过滤 Excel 数据透视表

如何用VBA宏程序将excel中的内容批量复制到word文档中去

将图片从 Excel 形状复制到 VBA 中的图像对象

Excel VBA:如果在范围内找不到值,请转到

EXCEL中用VBA复制整行

有没有办法让 Excel VBA 宏提示输入文件? [复制]