VBA实战(Excel)(1):提升运行速度
创作时间:
作者:
@小白创作中心
VBA实战(Excel)(1):提升运行速度
引用
CSDN
1.
https://blog.csdn.net/nianfen/article/details/138742775
在Excel自动化和数据处理中,VBA(Visual Basic for Applications)扮演着重要角色。然而,随着处理的数据量增大和代码复杂度提升,如何优化VBA代码的运行效率成为了一个关键问题。本文将介绍10种实用的VBA代码优化技巧,帮助你显著提升Excel 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 '禁用分页符
持续更新中,技术交流欢迎微信沟通:
热门推荐
锂电池电解液成分详解:从基础构成到应用场景
浙江景宁警方揭秘:高利贷受害者如何自救?
从“高利贷第一案”到入刑:治理高利贷的法治之路
警惕农村高利贷陷阱:你的钱还得起吗?
海带、紫菜、裙带菜:补碘首选的海洋馈赠
吃海带补碘真的靠谱吗?
孕期补碘,你做对了吗?
尿素的农业价值及其创新应用探索
糖尿病饮食有什么原则?香港卫生防护中心有什么建议?
高利贷背后的黑暗面:你真的了解吗?
二型糖尿病患者适合吃的4种豆类,稳定血糖效果好!
275种食物血糖生成指数表:如何通过选择低GI食物控制血糖
《儒林外史》严监生:不舍油灯两茎草,万贯家产皆为谁
移动支付安全:五大威胁及防护策略
1人遇难!广州一批发市场突发火灾!官方最新通报
散养鸡成本低效益高的主要步骤是什么?
蒸馒头有“四大忌”,从酵母到开锅,这些技巧你必须知道
如何妥善保存未使用的酵母,密封冷藏以防受潮变质
教你辨别真假碘盐:从外观到防伪标志全攻略
全国碘缺乏病防治日:如何科学补碘?
峨眉派稀有拳术:从跛子拳到蟹拳的实战奥秘
峨眉山:千年武学圣地的文化传承
峨眉武术:佛道合一的艺术之美
郭襄:峨眉派祖师爷的江湖传奇
食堂管理智能化:重塑餐饮新生态
智慧食堂:打破传统餐饮枷锁,开启智能新时代
食堂未来式:揭秘智慧食堂的创新方案
2025蛇年春节健康防护全攻略:科学防护与传统习俗的完美融合
让烘焙师又爱又恨的隔夜冷藏法最全解析!
波兰种:当日常温法/隔日冷藏法○面种