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 '禁用分页符
这些方法可以帮助你优化VBA代码的执行效率,提升Excel的运行速度。希望对你有所帮助!
热门推荐
耳内视镜微创技术 为中耳炎患者带来听力新希望
精准控制的艺术:无人机PID控制算法的工程应用与挑战
苏州机场最新进展!设计方案曝光
火星存在生命的新证据:科学家揭示生命迹象
电脑矿机为什么不能买?有何缺陷吗?
STM32之SG90舵机控制
一文读懂疝气:从症状识别到手术治疗
儿童补牙后出现牙齿疼痛该如何处理?有效缓解儿童补牙后牙痛的方法是什么?
晋中市小街巷改造工程全面完工,着力提升城市“里子”和“面子”
俄乌冲突中的反无人机作战方式
多德勒支与FC埃因霍温的对决:历史数据与近期状态分析
纪录片《是坏情绪啊,没关系》:爱能抚平一切
如何提高工作效率?分享9个高效率工作的方法
汉朝与罗马帝国:两个古代文明的辉煌与比较
开车下山时如何确保安全?有哪些驾驶技巧可以避免危险?
物生地组合可以选什么专业?附物理生物地理就业方向
镀锌钢管规格型号及尺寸表详解
被诬告如何追究对方
如何安全地保存VBA中的数据库密码
中科院7家研究所,在南京设立8家创新研究院!
“携宠出游”的风吹到了上博、外滩!“毛孩子”化身流量入口,“它经济”拓展消费场景
正念养育的力量:不做情绪失控的家长!
股票交易中的颜色代码代表什么
如何客观认识股票市场的各种情况?这些情况对投资决策有哪些影响?
新课标背景下的跨学科学习:内涵、设置逻辑与实践原则
应对头痛的多种原因与缓解方法探讨:生活习惯的重要性
用工业辣椒精,堪比“制毒现场”,网红餐厅凭什么征服年轻人
常见的三种高分子材料3D打印技术:FDM、SLS、SLA
碗莲不用土只用水养正确使用方法
为什么戴着耳塞总听到自己的心跳