【问题标题】:Excel Macro: conditional cut and paste between workbooksExcel 宏:工作簿之间的条件剪切和粘贴
【发布时间】:2011-08-29 15:05:22
【问题描述】:

所以我想要一个在 Excel 文件(“input.xls”)中运行的宏,它正在另一个 Excel 文件(“data.xls”)中搜索值“1”的列(该列中的唯一值是1 和 0)。当它找到“1”时,它应该将该文件中的整行复制并粘贴到“input.xls”中。

这是我的代码

Sub NonErrorDataParse()
    Dim intEnd As Integer

    Workbooks("data.xls").Sheets("Raw").Activate

    intEnd = 65000

    Range("F").Select

    Do Until ActiveCell.Row = intEnd

        If Int(ActiveCell.Value) = 1 Then
            Range(ActiveCell.Row & ":" & ActiveCell.Row).Cut
            intEnd = intEnd - 1
            Workbooks("input.xls").Sheets("Non-errors").Activate
            Range("A1").Select
            ActiveSheet.Paste
        Else
            ActiveCell.Offset(1, 0).Select
        End If

    Loop

End Sub

但是,当我运行它时,它会在“data.xls”上显示“下标超出范围”错误。无论我如何摆弄代码,我似乎都无法克服该错误(即使我有其他宏正在访问工作正常的工作表)。

关于如何解决它的任何想法?或者更好的代码可以做同样的事情?

提前致谢

【问题讨论】:

  • 为什么不先对 data.xls 进行排序呢?然后,您可以计算一次剪切和粘贴。

标签: excel paste worksheet


【解决方案1】:

您不必每次执行命令时都SelectActivate
您还可以使用 Range("A65536").End(xlup) 查找最后使用的单元格,而不是解析每个单元格(这可能导致您的错误)。

代码如下所示:

Sub NonErrorDataParse()
    Dim intEnd As Integer
    Dim c As Range

    intEnd = Workbooks("data.xls").Sheets("Raw").Range("A65536").End(xlUp).Row

    For Each c In Workbooks("data.xls").Sheets("Raw").Range("F1:F" & intEnd)
       If CStr(c.Value) = "1" Then
           c.EntireRow.Cut
           Workbooks("input.xls").Sheets("Non-errors").Rows("1:1").Insert Shift:=xlDown
       End If
    Next c
End Sub

然而,如果您有很多行,使用autofilter 方法或使用字典会更快。

【讨论】:

  • 这段代码给了我“编译错误:未定义用户定义的类型。”
  • @Billy:对不起,我的错误,我没有时间检查编辑器。我更正了我的代码
  • 感谢您的帮助,但这仍然无法正常工作。它没有给我一条错误消息,但它只是没有剪切和粘贴到新工作簿中。我摆弄了它,但如果我将它更改为工作表之间而不是工作簿之间,或者如果我使用不同的工作簿,它甚至都不会工作。
  • 我做了一点改动(添加了Workbooks("data.xls").Sheets("Raw").,以便我们确定 Excel 不会误解我们试图削减的 wb)但我不确定这是不是我可以不要在这里测试。明天我将使用一些示例文件进行全面测试。 Excel 有时在复制/粘贴方面很棘手。但是,如果您想尝试,可以逐步调试并执行宏,看看它失败的地方:)
  • @Billy:我做了一些更改,它对我有用(注意我使用了可选的CStr,以防您要检查的单元格格式不正确)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-01
  • 1970-01-01
相关资源
最近更新 更多