VBA实战(Excel)(1):提升运行速度
创作时间:
作者:
@小白创作中心
VBA实战(Excel)(1):提升运行速度
引用
CSDN
1.
https://blog.csdn.net/nianfen/article/details/138742775
在使用VBA进行Excel开发时,提升代码运行效率是每个开发者都关心的问题。本文总结了10种实用的优化方法,从关闭屏幕刷新到使用数组处理数据,从减少循环判断到使用WithValue2属性,每种方法都配有具体的代码示例,帮助你写出更高效、更专业的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 '禁用分页符
持续更新中,技术交流欢迎微信沟通:
热门推荐
煎鱼是热锅冷油还是冷锅热油?两种方法详解与建议
计算机网络:如何隐藏真实的IP和MAC地址?
能源市场风云再起:油价暴跌、天然气承压,供需博弈成焦点
如何优化睡眠质量:改善现代生活中的睡眠困扰?
拔罐位置详解:这些部位也能拔罐?了解常见拔罐位置!
产权房到期了怎么办?一文详解产权房、小产权房和集资房的区别
买了新车必看!教你足不出户临牌到手→
九江湖口县:育秧“科技范”让春耕生产跑出“加速度”
长沙:科技赋能,点亮早稻春耕新图景
Excel表批注中图片怎么旋转
紫苏叶功效|抗衰老必食!中醫拆解紫蘇葉3大好處+食譜推介:解胃氣/增強抵疫力
大城市租房子多少钱?解析一线城市租房成本与省钱策略
电信诈骗防范指南:识别与应对策略
如何轻松判断闰年:规则与生活中的影响解析
城下之城十五重:从“叠城”读懂老城更新
贸易战对黄金价格的影响如何?这种影响会带来怎样的市场变化?
“解手”一词为啥是“上厕所”之意?有什么典故吗?
狗狗牙结石自行脱落的小妙招
材料加工领域对高效、环保需求增加,推动冷等离子体技术市场发展
苏美尔人是否存在,苏美尔文明真的吗?
苏美尔文明作为四大文明起源之一,是如何一步步发展起来的?
新入职员工工资发放指南:时间、计算方式及特殊情况详解
网页如何访问本地的html文件夹
香港银行大盘点:主流零售银行评分与评价全解析
锡纸用亮面还是雾面?锡纸正确使用方法及5大食品安全贴士
2024年港口海运盘点:年底货运“淡季不淡” 2025年海运价格或保持中高位
杭州4月演唱会汇总:时间、地点和票价全攻略
项目经理五管四控是什么
如何使用Excel日历计划表高效管理你的时间?
平年与闰年的区别及其对生活的影响解析与理解