VBA实战:提升Excel运行速度的10个实用技巧
创作时间:
作者:
@小白创作中心
VBA实战:提升Excel运行速度的10个实用技巧
引用
CSDN
1.
https://blog.csdn.net/nianfen/article/details/138742775
在使用VBA进行Excel开发时,提升代码运行效率是一个常见的需求。本文总结了10个实用的优化技巧,包括关闭屏幕刷新、关闭自动计算、使用数组处理数据等,每个技巧都配有具体的代码示例,帮助开发者快速提升VBA编程效率。
1. 关闭屏幕刷新
关闭屏幕刷新能让客户不必看到过程,有时候能提升用户体验,有时候是降低的。低代码时提升作用不明显,酌情使用。
Application.ScreenUpdating = False '关闭屏幕更新
'此处放置你的程序
Application.ScreenUpdating = True '恢复屏幕更新
2. 关闭自动计算
如果工作表有很多函数,在代码运行过程中,关闭公式计算可以显著提升运行速度。
Application.Calculation = xlCalculationManual '手动重算
ActiveSheet.Calculate '计算当前工作表
Calculate '计算这个工作簿
Application.Calculation = xlCalculationAutomatic '自动重算
3. 关闭警告提示
防止你的程序被警告打断,应只在某些弹警告的工况下使用,测试时不要用。
Application.DisplayAlerts = False '关闭提示
'你的程序
Application.DisplayAlerts = True '恢复提示
4. 关闭事件
人工操作数据的时候会设置一些响应,当程序操作变更数据的时候也会触发一些响应例如change、select,当此处程序会触发响应时,关闭所有响应不仅能提高程序运行速度,也能避免一些Bug。
Application.EnableEvents = False '关闭事件
'你的程序
Application.EnableEvents = True '启动事件
5. 定义数组
将range赋值给数组,判断和处理数据时使用数组,输出时再操作单元格,可以极大加快程序运行速度。注意三点:
- 数组是存储在内存中,避免赋值过大的range给数组,否则很占内存;
- 逻辑运行完之后不影响其他函数情况下应清除数组释放缓存,否侧会反复占用内存。
- 函数外的定义数组是长期占内存的,应在函数内定义和释放。
电脑内存不足会报错:内存溢出!
Dim datamp0 As Variant
datamp0 = Sheets(sht_name).Range("A1:Z20000")
'你的程序
Erase datamp0
6. 加进度条
加进度条虽然不能提高代码运行效率甚至稍微降低,但是如果程序需要运行较长时间,进度条能提振用户信心,避免用户多次点按误操作,造成excel异常卡死。
Sub test()
For i = 1 To 10000
Debug.Print "i=" & i
Call ProcessBarUpdater(i, 10000, "正在处理") '显示进度
Next
End Sub
Sub ProcessBarUpdater(intCurrent As Long, intLast As Long, strTopic As String) '进度条
Dim intCurrentStatus As Integer
Dim intNumberOfBars As Integer
Dim intPercentDone As Integer
intNumberOfBars = 50
intCurrentStatus = Int((intCurrent / intLast) * intNumberOfBars)
intPercentDone = Round(intCurrentStatus / intNumberOfBars * 100, 0)
Application.StatusBar = strTopic & " [" & String(intCurrentStatus, "|") & _
Space(intNumberOfBars - intCurrentStatus) & "]" & _
" " & intPercentDone & "% Complete"
If intCurrent = intLast Then Application.StatusBar = ""
End Sub
7. 少用循环判断
- 在原有数据后面加数据,避免使用for循环找空值,用VBA自带函数
ni = Sheets("扭矩查询").Range("a" & Rows.Count).End(xlUp).Row + 1
- 查找数据,避免for循环判断,用find函数
Set rng = Sheet1.Range("A1:C10").Find(What:=searchValue, LookIn:=xlValues, LookAt:=xlWhole)
If Not rng Is Nothing Then
MsgBox "找到值在: " & rng.Address
Else
MsgBox "未找到值。"
End If
8. 使用 .Value2
从 Excel 区域读取数据时使用 .Value2 ,.Text 和.Value 返回速度较慢。
9. 使用With
对某个表格,区域,或者单元格进行一系列的操作,比如内容,颜色,格式等,可以用with来提高代码运行效率,同时让代码结构更清晰。
With ActiveSheet
.Range("P56") = Page_Num + (I - 2) * 2
.Range("R56") = Total_page
.Range("M55") = Sheets("封面").Range("d7")
.Name = I - 2
End With
10. 其他
Application.DisplayStatusBar = False '关闭状态栏
ActiveSheet.DisplayPageBreaks = False '禁用分页符
持续更新中,技术交流欢迎微信沟通:
热门推荐
一文掌握:空格键多语言输入全攻略
苹果手机打字效率提升:双击空格键快速输入句号
商场停车场保安服务合同范本
国际商会国际仲裁院推荐:企业如何选择仲裁或诉讼
韩国客机失事:家属该如何选择维权途径?
仲裁 vs 诉讼:谁才是真正的省钱省时神器?
企业维权:仲裁还是诉讼?如何选择最合适的争议解决方式
北京一般纳税人注销指南:流程、材料与风险防范要点
一般纳税人注销库存管理攻略
一般纳税人注销的最新会计处理技巧
告别传统五天工作制,4.5天模式成全球新趋势
每周工作4.5天:企业提效、员工减压的双赢方案
显隐之间见匠心:《国色芳华》的文化细节解读
固态电池量产竞速新变局
巴托洛梅奥:威尼斯雇佣兵领袖的战斗传奇
BB霜注重护肤,CC霜强调遮瑕:底妆产品选购指南
BB霜遮瑕力胜CC霜,但后者更轻薄透气
春节头像设计大赛,谁是最靓的崽?
新年祝福英文诗精选:从告别到希望
新年用英文祝福!25个实用新年贺词精选
从经典到创意:新年英文祝福语精选集
吴奇隆离婚传闻发酵,马雅舒更新动态引关注
马雅舒亮相科幻电影周:从古装到科幻,期待新突破
研究证实:脚趾比例与寿命相关,这些方法助你保持脚部健康
韩国首尔高速公路44车连环追尾,道路结冰致1人重伤
医疗废物分类处理,守护我们的绿色家园
医疗废物分类:医院管理的新挑战
新冠下的医疗废物处理:职业健康保卫战
医疗废物分类,你做对了吗?
冬甘蔗上线,喝一口甘蔗汁,免疫力up up!