image.png

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