所以我想要一个在Excel文件(“input.xls”)中运行的宏,它在另一个Excel文件(“data.xls”)中搜索值为“1”的列(该列中的唯一值是1s和0s)。当它找到“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”上给出了“下标超出范围”错误。无论我如何摆弄代码,我似乎无法通过该错误(即使我有其他宏访问该表工作正常)。
关于如何修复它的任何想法?或者更好的代码可以做同样的事情吗?
提前致谢
答案 0 :(得分:0)
每次执行命令时,您都不必Select
或Activate
您还可以找到最后一个使用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
方法或使用字典会更快。