我正在编写一个复制一组数据的VBA宏,应用一些过滤,然后将过滤后的数据复制到下一个可用行。我的问题是最后一行“copyRange.SpecialCells(xlCellTypeVisible).Copy GAR070 ....”它有时可以工作,有时不会出现错误:运行时错误'1004':对象'_Worksheet'的方法'范围'失败。
如果我然后将对GAR070工作表对象的引用更改为Sheets(“GAR070”),我最终得到运行时错误“1004”:应用程序定义或对象定义的错误。
因为这有时对我有用,有时候我不知道它是否与我打开的其他工作簿有什么关系?或者当我声明对象时发生了什么?
我的代码还有很多,但我没有把它包含在这里,所以你不必全部阅读,但如果你怀疑可能会有一些东西在那里,我很乐意评论它。
我之前在这个网站和其他网站上看到过这样做的方法,这就是我最初用这种方法找到的方法。
请告诉我,如果我错过了任何事情,请提前多多感谢:)
Sub Check_for_specials()
Dim GAR070 As Worksheet
Dim LRowred As Long
Dim filterRange As Range
Dim copyRange As Range
Dim newrow As Long
Dim wb as Workbook
Application.ScreenUpdating = False
Set wb = ActiveWorkbook
Set GAR070 = wb.Sheets("GAR070")
'filter for "Y" in last column, copy this data and paste into the next available row
With GAR070
LRowred = .Cells(Rows.Count, "A").End(xlUp).Row
' turn off any autofilters that are already set
.AutoFilterMode = False
' the range that we are auto-filtering (all columns)
Set filterRange = .Range("A1:O" & LRowred)
' the range we want to copy (only columns we want to copy)
Set copyRange = .Range("A2:N" & LRowred)
' filter range based on column O
filterRange.AutoFilter field:=15, Criteria1:="Y"
' copy the visible cells to our target range
newrow = LRowred + 1
copyRange.SpecialCells(xlCellTypeVisible).Copy GAR070.Range(Cells(newrow, 1), Cells(newrow + 1, 14)) ' seems very volatile...
Application.ScreenUpdating = True
End sub
答案 0 :(得分:0)
这有点令人困惑,因为你有
With GAR070
但没有结束,所以我不知道你的结局在哪里结束。
这可能不是您遇到的问题的根源,但是这一行:
copyRange.SpecialCells(xlCellTypeVisible).Copy GAR070.Range(Cells(newrow, 1), Cells(newrow + 1, 14))
使用没有限定符的单元格。
如果End With高于此行且Cells(newrow,1)引用GAR070工作表上的地址,则应显示为:
copyRange.SpecialCells(xlCellTypeVisible).Copy GAR070.Range(GAR070.Cells(newrow, 1), GAR070.Cells(newrow + 1, 14))
如果End With低于此行,则应阅读
copyRange.SpecialCells(xlCellTypeVisible).Copy .Range(.Cells(newrow, 1), .Cells(newrow + 1, 14))
这有意义吗?