本帖最后由 sunjing-zxl 于 2011-4-19 09:19 编辑
- 使用已有的VBA方法
也有一些特定目的的VBA方法,它们提供在单元格区域执行特定操作的一种简单的方式。例如工作表函数,这些特定的方法比使用通常的VBA编码完成相同的任务要更快。最常用的是”Replace”方法和”Find”方法。
Replace方法:
下面的示例用了一种相当慢的方式代码改变单元格区域H1:H20000中每个单元格的值。
·
Sub NowDoThis1() ·
Dim Start As Double, Finish As Double ·
Start = Timer ·
'-------------------------------------- ·
Dim Cell As Range ·
For Each Cell In Worksheets(1).Range("H1:H20000").Cells ·
If Cell.Value = 4 Then Cell.Value = 4.5 ·
Next ·
'-------------------------------------- ·
Finish = Timer ·
MsgBox "本次运行的时间是" & Finish - Start End Sub 下面的示例使用Replace方法进行同样的操作,但运行得更快。 Sub NowDoThis2() '快约两倍 Dim Start As Double, Finish As Double Start = Timer '-------------------------------------- Worksheets(1).Range("H1:H20000").Replace "4", "4.5" '-------------------------------------- Finish = Timer MsgBox "本次运行的时间是" & Finish - Start End Sub Find方法:
下面的代码使用一种相对较慢的方法在单元格区域I1:I5000中值为4的单元格内添加一个蓝色的椭圆。 Sub FindItSlow() Dim Start As Double, Finish As Double Start = Timer '-------------------------------------- Dim Cell As Range For Each Cell In Worksheets(1).Range("I1:I5000").Cells If Cell.Value = 4 Then With Worksheets(1).Ovals.Add(Cell.Left, _ Cell.Top, Cell.Width, _ Cell.Height) .Interior.Pattern = xlNone .Border.ColorIndex = 5 End With End If Next '-------------------------------------- Finish = Timer MsgBox "本次运行的时间是" & Finish - Start End Sub 下面的示例使用了Find方法和FindNext方法执行相同的任务,但运行速度更快。 Sub FindItFaster() '快约25倍 Dim Start As Double, Finish As Double Start = Timer '-------------------------------------- Dim Cell As Range, FirstAddress As String With Worksheets(1).Range("I1:I5000") Set Cell = .Find(4) If Not Cell Is Nothing Then FirstAddress = Cell.Address Do With Worksheets(1).Ovals.Add(Cell.Left, _ Cell.Top, Cell.Width, _ Cell.Height) .Interior.Pattern = xlNone .Border.ColorIndex = 5 End With Set Cell = .FindNext(Cell) Loop Until Cell Is Nothing Or Cell.Address = FirstAddress End If End With '-------------------------------------- Finish = Timer MsgBox "本次运行的时间是" & Finish - Start End Sub 关于带有特定目的的VBA方法的更多的信息,您可参见VBA帮助系统相关主题。 结语
当然,代码优化可能不是绝对必要的,这依赖于您要做的工作……如果您正好编写了一个快速且简短的或者是一次性使用且与速度和/或简洁要求无关的代码,您就不需要优化代码。
但另一方面,如果您处理一个带有很多数据、工作簿、工作表等大的工程,再次检查您第一次编写好的代码,看看是否您的代码需要优化,而这样做总是值得的。
最终,您将养成编写代码的好习惯,将会使您的代码更简洁、运行更快速、并且容易为您自已和他人阅读和调试。同时,由于您的代码简洁,因而输入更快,工作效率更高。 |