Sub test()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
执行的代码
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
- 声明非Variant占用少内存
- 避免声明浮点类型变量,因为用到浮点运算器会拖慢速度,比如Currency类型就会Single类型运算快,因为前者不用浮点运算处理器.
单元格(区域)写法有3种,以A1单元格为例,可以使用
1.Cell对象写法:cells(1,1)
2.Range对象写法:Range("A1")
3.名称写法:[A1]
三种写法各有优缺点,但以取值速度论,cells(1,1)最快,[A1]写法最慢,Range("A1")比cells(1,1)稍慢,但优点是在VBE中输入可以显示属性方法等快速输入信息.此外,要明示对象属性而不要依赖于对象的默认属性,这是一种好的编程习惯.下面两句,第二句要比第一句快得多:
x= cells(1,1)
x= cells(1,1).value
Sub test()
Dim a1 as String
Const a1 as String
End Sub
Dim WordObj As Word.Application 比用 Dim WordObj As Object 要更快,所以尽可能在VBE的Tools --> References中建立目标索引后直接在代码中引用.
'以下两段代码前者比后者快!
Dim WS as Worksheet
For Each WS In Worksheets
MsgBox WS.Name
Next WS
------------------------------------------
Dim i as Integer
For i = 1 To Worksheets.Count
MsgBox Worksheets(i).Name
Next i
如用:
Range("A1").Font.Bold = True
而不是:
Range("A1").Select
Selection.Font.Bold = True
MySum = Application.WorksheetFunction.Sum(Range("A1:A100"))
比以下速度快!
For Each C In Range("A1:A100")
MySum = MySum + C.Value
Next C
有些工作表函数(方法)速度是很快的,比如FIND,VLOOKUP等,要记得使用它们,不要花力气去做不讨好的事。当使用工作表函数时,操作对象应避免使用内存变量,那样反而慢。
对占用内存较多的对象变量,不要时要记住set=nothing,如果你对你的机器内存的容量没有信心,应避免使用递归程序,递归的过程会吃掉大量的内存。
当需要对较大区域进行相同的操作时,可以先使用union等方法收集,一次进行。在Range对象上尤其明显,内容、格式变更,删除等等一个一个的处理要比把这些选定后一起处理慢得多的多。