Pra*_*mod 0 excel vba excel-2007 excel-vba
我使用下面的代码将列从一个工作表复制到另一个工作表,然后用空值替换空白单元格:
'Copying If Employee
sourceSheet.Activate
Range(Cells(2, 7), Cells(Rows.Count, 7).End(xlUp)).Select
Selection.Copy
destSheet.Activate
Range("E2", Cells(Rows.Count, 7)).PasteSpecial
For Each cell In Range("E2", Cells(Rows.Count, 5))
If Len(cell.Value) = 0 Then
cell.Value = "No"
End If
Run Code Online (Sandbox Code Playgroud)
当我用Range("E2", Cells(500,5))它替换for语句工作正常.
可能是什么问题?我无法弄明白.谁能帮我这个?
Excel 2007有1,048,576行.
你的每个循环必须通过一百万个单元格,并且每次必须将一个单元格(包含其所有属性)加载到内存中.这种不断加载和卸载单元对象非常耗费资源.
每次将值分配给No单元格时,Excel都会重新计算工作表,刷新屏幕并可能触发工作表/工作簿/单元格事件.所有这一切都在评估下一个细胞到下一个细胞之前.除非您拥有大量数据,否则在此示例中将发生数十万次.
500个单元是一个小得多的数字,可以毫无问题地处理.
编辑:
得到最后一排.
如果要获取包含数据的最后一个可见行,请使用:
With Workbooks(myWorkbook).Worksheets(myWorksheet)
LastRow = .Cells(.Rows.Count, "E").End(xlUp).Row
End With
Run Code Online (Sandbox Code Playgroud)
如果要获取包含数据的最后一行,无论它是可见还是隐藏,请使用:
With Workbooks(myWorkbook).Worksheets(myWorksheet)
LastRow =.Range("E2").EntireColumn.Find("*", .Cells(1, .Range("E2").Column), , , xlByRows, xlPrevious).Row
End With
Run Code Online (Sandbox Code Playgroud)
欲了解更多信息,Rondebruin有一个很好的网站,有关于拉斯行/列的更多信息.
| 归档时间: |
|
| 查看次数: |
3006 次 |
| 最近记录: |