2013-08-29 58 views
4

我写一个宏来遍历一些记录,想要一个for循环,以避免无限任何机会,而循环,如:为什么要避免Application.Worksheetfunction?

For i = 0 to COUNT 
    **do stuff with START_CELL.Offset(i,0) 
Next 

我不记得如何从VBA做的事情计数所以搜索发送给我这里:Use VBA to Count Non Blank Cells in a Column。一种建议是

n = Worksheets("Sheet1").Range("A:A").Cells.SpecialCells(xlCellTypeConstants).Count 

这似乎过于复杂,所以我做了更多的一些挖掘和决定,我将使用:

COUNT = Application.WorksheetFunction.Count(COUNT_RANGE) 

又如使用Application.WorksheetFunction.CountA()在该网页上,但还是现在我担心(偏执狂)有一个原因,我应该避免它。有没有?

谢谢大家。

+7

没有理由避免使用工作表函数。 – tigeravatar

+4

保留'WorksheetFunction',因为它们非常高效。请记住这两者之间的区别:'Application.Count()'和'WorksheetFunction.Count()' - 如果有任何错误,它们的行为将有所不同。您也可以尝试以这种方式获取最后一行:'lastRow = Worksheets(“Sheet1”)。Cells(Rows.count,“a”)。End(xlUp).Row'但很难确定哪个选项最好看到你的数据表。 –

+0

再次感谢。我现在感觉好多了:)在我的脑海里,VBA与Excel分开的程度足以让通讯变慢(呃)。我喜欢编写超过60秒的宏,所以我试着提前考虑性能。 – ptpaterson

回答

4

避免工作表函数的唯一显示原因是如果您担心向后兼容旧版本的Excel。新版本的Excel通常会引入新的工作表函数。如果这些在用户的Excel版本中不可用,则会遇到困难。

除此之外,如果您知道用户正在使用的版本中提供的功能,它们通常非常高效,并且通常比VBA中的功能更快,特别是在避免在单元中循环时评论。

相关问题