友情提示:本文共有 1407 个字,阅读大概需要 3 分钟。
大家好,我们今日继续讲解VBA代码解决方案的第89讲内容:VBA代码的优化篇,少用激活Activate语句或Select选择语句,可以提高程序的运行速度。
在VBA代码的编写过程中我们经常会使用大量的Select和Activate语句,这些语句的使用往往会增加代码运行过程中的可视效果,但往往会牺牲代码的运行速度。所以可以通过减少这些语句的使用以加快运行速度,
首先我们先研究一下这两个方法,Select和Activate都是作用于对象,但是也有所分别,对于工作表对象,select方法是后台操作,可以选择多个工作表,而activate则无法选择多个工作表激活,所以会报错。select方法无法选择隐藏的工作表,例如我将sheet1工作表隐藏后选择它。 ActiveWorkbook.Sheets("sheet1").Select。而使用activate方法则可以激活隐藏的工作表,不会报错。针对工作表而言,两个方法也有不同的地方。首先select选择范围后,会默认激活区域中最左上角的单元格。使用select选择了区域范围会有对应的范围提示框,其左上角单元格高亮无阴影显示。也就是说select无法指定激活的单元格,而activate则可以,不过需要搭配着select使用,必须先使用select指定范围,然后使用activate指定单元格。分析了上述的选择不同后,我们接着看下面的代码:
Sub MySta()
Dim i As Integer
Dim t As Date
Dim t1 As String
Dim t2 As String
t = Timer
For i = 1 To 3000
Sheets("Sheet10").Select
Sheets("Sheet10").Cells(i, 1).Select
ActiveCell.FormulaR1C1 = "10"
Next
t1 = Timer - t
t = Timer
For i = 1 To 3000
Sheets("Sheet10").Cells(i, 5) = "10"
Next
t2 = Timer - t
Sheets("Sheet10").Cells(3, 2).Select
Sheets("Sheet10").Cells(3, 2) = Format(t1, "0.00000")
Sheets("Sheet10").Cells(4, 2) = Format(t2, "0.00000")
MsgBox "第一次运行时间:" & Format(t1, "0.00000") & "秒" _
& Chr(13) & "第二次运行时间:" & Format(t2, "0.00000") & "秒"
End Sub
代码解析:
Sta过程分别使用录制宏所得的代码和修改后的代码给单元格填充,最后使用消息显示运行时间。
第8行代码到第10行代码有两次使用Select方法,第15行代码是修改后的代码,在代码量不大的情况下运行速度区别不大,但是在循环5000次后运行速度就会差别很大。
运行Sta过程,消息框显示两种方法的运行时间,可以看出后一种方法的运行时间要远远小于前者代码的运行时间.
代码窗口:
运行截图:
从上述代码运行结果看出:节约的时间是很可观的
今日内容回向:
1 本节优化代码的措施是什么?
2 你是否认同上面的优化措施呢?其实我在写代码的时候往往是采用的第一种方案。不做优化。
本文如果对你有帮助,请点赞收藏《VBA代码优化 Select和Activate语句对程序速度的影响》,同时在此感谢原作者。