【问题标题】:Excel- VBA filter and move resultsExcel-VBA 过滤和移动结果
【发布时间】:2015-04-10 19:53:52
【问题描述】:

我正在尝试设置一个 vba 代码来过滤一张数据并将包含特定值的行剪切到其他表格中。下面的 sn-p 用于这些过滤器之一。到目前为止,我正在努力调试这条线。

myRange.Offset(1).Resize(myRange.Rows.Count - 1).SpecialCells(xlVisible).Cut 

我不断收到一个错误,我无法在多个部分上运行它。任何帮助将不胜感激。

Sub MoveButton()
Sheets("Sheet1").Activate
Set myRange = Range(Range("A1"), Range("Z" & Cells.Rows.Count).End(xlUp))
myRange.Resize(1).AutoFilter
myRange.AutoFilter Field:=13, Criteria1:="Closed"
myRange.Offset(1).Resize(myRange.Rows.Count - 1).SpecialCells(xlVisible).Cut
Sheets.Add After:=Sheets(Sheets.Count)
Sheets("Closed").Activate
ActiveSheet.Paste
Application.CutCopyMode = False
myRange.AutoFilter

End Sub

好的,这就是我使用记录宏得到的结果。现在我只是不确定如何更改范围,以便它们自动选择所有过滤的行并将它们复制并粘贴到下一张纸上的下一个 wmpty 行。

Sub MoveCancelled()

    Sheets("Sheet1").Select
    Rows("2:2").Select
    Selection.AutoFilter
    Selection.AutoFilter
    Range("A2").Select
    ActiveWindow.ScrollColumn = 7
    ActiveSheet.Range("$A$2:$Z$20").AutoFilter Field:=13,Criteria1:="Closed"
    Rows(3).Select ' Selecting the row to copy, but it could be more than just one row.
    Selection.Copy
    Sheets("Closed").Select
    Rows(114).Select ' Selecting the paste location at the bottom of the next sheet.
    ActiveSheet.Paste


End Sub

我找到了这个帖子并最终放弃了我所有的其他努力。

Autofilter Macro, then copy visible data ONLY and paste to next available row

这个解决方案效果很好。

【问题讨论】:

  • 首先在Macro Recorder开启的情况下手动运行练习......然后检查生成的代码。
  • 不确定为什么要在过滤之前调整大小,您应该从标题行过滤
  • 我尝试使用宏记录器。我将该代码添加到上面的消息中。我不确定如何使范围自动选择所有过滤的行进行剪切/复制或选择关闭工作表中的第一个空行。

标签: excel filter vba


【解决方案1】:

我相信是.cut操作让你伤心,试试这个,

Sub MoveButton()
    Dim ws As Worksheet, MyRng As Range, rws As Long, Frng As Range
    Dim sh As Worksheet
    Set ws = Worksheets("Proposals")
    With ws
        rws = .Cells(Rows.Count, "A").End(xlUp).Row
        Set MyRng = .Range(.Cells(1, 1), .Cells(rws, "Z"))
        MyRng.AutoFilter Field:=13, Criteria1:="Closed"
        Set Frng = .Range(.Cells(2, 1), .Cells(rws, "Z")).SpecialCells(xlCellTypeVisible)
    End With

    Sheets.Add After:=Sheets(Sheets.Count)
    Set sh = ActiveSheet
    Frng.Copy sh.Cells(Rows.Count, "A").End(xlUp).Offset(1, 0)
    Frng.EntireRow.Delete
    ws.AutoFilterMode = 0
End Sub

【讨论】:

  • 这看起来不错,但我收到一条错误消息,指出这不适用于重叠部分。不知道这到底是什么意思。
  • 我也是,你还没有告诉我们什么?
猜你喜欢
  • 2012-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-15
  • 2020-10-29
  • 1970-01-01
相关资源
最近更新 更多