VBA实战(Excel)(1):提升运行速度
创作时间:
作者:
@小白创作中心
VBA实战(Excel)(1):提升运行速度
引用
CSDN
1.
https://blog.csdn.net/nianfen/article/details/138742775
在使用VBA进行Excel编程时,提升代码运行速度是一个常见的需求。以下是10个实用的优化技巧:
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 '禁用分页符
持续更新中,技术交流欢迎微信沟通:
热门推荐
不管车好坏,行驶5万公里后这4个零件记得换,否则修不远了
全民健康素养宣传月|健康饮食之“三减”——减盐、减油、减糖
刘邦从韩信带走多少兵:权力与忠诚的交织
什么是电动机效能优化
先进电机技术 —— 电机损耗如何优化?
老年手足皲裂的预防与治疗
8500元翡翠手镯价格解析:带紫罗兰色调的性价比评估与市场行情分析
深度解析第四代住宅 | 经典案例 · 10款
电脑格式化了还能恢复数据吗?硬盘数据恢复的4种方法,建议收藏
试用期算正式劳动合同期限内吗,是什么
Cell子刊:哈佛大学发布iPSC干细胞治疗帕金森病临床前数据
钻石复仇嘴炮的致命杀招:卡夫踢
如何妥善保存收藏纸币?这些保存方法对纸币价值有何保护作用?
养老金缴费基数及其法律影响
烷基糖苷聚氧丙烯醚制备过程、表面张力、泡沫去污乳化性能测定——摘要、实验
如何合理分摊更换电梯费用
杭州话为啥有儿化音
蛋鸡养殖降本增效的5大措施
9000日元 = 人民币,了解日元对人民币的兑换比率
安迪·穆雷是否为德约科维奇制定了击败阿尔卡拉斯的战术计划?
左背部酸疼是怎么回事
背疼的原因和预防措施详解
牛肉汤和羊肉汤哪个营养价值更高?
价格周报|本周生猪均价走稳,北方市场二次育肥热度渐起
耐寒树种的抗寒能力并非绝对:从内在潜力到外在表现
成立公司必须有实收资本:探究其重要性与实际操作
深入解析:美国年报中的实收资本及其重要性
2025国家公务员百问百答:影响入面分数有哪些因素?
乌龙茶品种大盘点:全面解析各类乌龙茶的特点、产区与口感
玉米淀粉在国标中的定义是什么?它对市场交易有何影响?