我有一个宏来过滤大型工作簿中的某些数据,然后将其粘贴到仅包含该类数据的工作簿中。最初,我使用.select和.activate编写代码,但从那时起就试图摆脱它。
以下是使用.select
的代码 Workbooks(DataFileName).Sheets(twttgtdata).Activate
Range("A2").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Workbooks(ShopFileName).Sheets(twttgt).Activate
Range("A2").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Select
ActiveSheet.Paste
Application.CutCopyMode = False
以下是执行相同操作的代码的优化版本。
With Workbooks(DataFileName).Sheets(twttgtdata)
On Error Resume Next
.ShowAllData
Intersect(.UsedRange, .UsedRange.Offset(1)).SpecialCells(xlCellTypeVisible).Copy _
Destination:= Workbooks(ShopFileName).Sheets(twttgt).Cells(Workbooks(ShopFileName).Sheets(twttgt).Rows.Count, "A").End(xlUp).Offset(1, 0)
End With
Application.CutCopyMode = False
据我所知,这两个代码块执行完全相同的任务。但是,在使用后一个代码时,它会使工作簿中的一组公式出现#value错误。前者没有。我已经彻底调查了,几乎可以肯定它与格式或数字类型无关。我错过了什么?相交是否比我理解的更多?
如果有帮助,可以提供更多信息。不知道还有什么可以做的来诊断这个。