哪们大侠看看我这个VBA运行速度超慢的原因在哪,该怎么优化?

作者&投稿:濯武 (若有异议请与网页底部的电邮联系)
~

代码优化建议:

  • 变量命名:变量名应该具有描述性,让人能够理解变量的含义。例如,使用更具体的变量名来代替 i、j、num 等。

  • 减少重复计算:在代码中多次使用相同的计算,可以将计算结果存储在一个变量中,以减少计算次数。

  • 使用 With 语句:使用 With 语句可以减少代码中的嵌套,提高代码可读性。

  • 避免使用 Select 和 Activate:在代码中避免使用 Select 和 Activate 语句,以减少 Excel 的无响应和卡顿。

  • 避免使用 Find 函数:在代码中使用 Find 函数来查找单元格,会增加代码的复杂性和运行时间。建议直接使用循环来遍历单元格。

  • 使用数组:对于大量数据的操作,可以使用数组来存储数据,以减少对 Excel 的操作次数,提高运行速度。

  • 避免使用 If...Else 语句:在代码中使用 If...Else 语句会增加代码的复杂性和运行时间。如果条件简单,可以直接使用单一语句代替。

  • 根据以上建议,可以对代码进行优化:

    Sub scpz()

    Dim startRow As Long, endRow As Long Dim nonEmptyRow As Long, j As Long Dim data() As Variant Dim i As Long, k As Long Dim currentDate As Date Dim message As String

    startRow = 8 '账务处理起始行号 endRow = 4000 '账务处理结束行号 nonEmptyRow = 0 '日记账非空行号 j = 0 '当前行号 k = 0 '计数器 currentDate = Now() '获取当前日期 message = "本期资金日记账已生成凭证!" '生成提示信息

    '获取资金日记账最后一行号 With Worksheets("资金日记账") num = .Cells(Rows.Count, "E").End(xlUp).Row End With

    '将数据存储到数组中 data = Sheet10.Range("O8:O" & num).Value

    '调用进度条 Call showProgressBar

    '遍历数据并生成日记账 For i = startRow To num If data(i, 4) <> "" And data(i, 15) <> "√" And data(i, 4) >= Sheet10.Cells(6, 10) And data(i, 4) <= Sheet10.Cells(6, 12) Then nonEmptyRow = i '记录非空行号 j = j + 1 '增加当前行号 Sheet17.Cells(j, 6) = data(i, 4) '复制数据到日记账中 Sheet17.Cells(j, 7) = data(i, 6) Sheet17.Cells(j, 8) = data(i, 16) Sheet17.Cells(j, 9) = data(i, 17) If data(i, 8) = "" Then Sheet17.Cells(j, 10) = data(i, 9) '如果备注为空,则使用摘要作为备注 Else Sheet17.Cells(j, 10) = data(i, 8) '否则使用实际备注 End If Sheet17.Cells(j, 11) = currentDate '记录当前日期 Sheet17.Cells(j, 12) = "日记账生成" '记录操作类型为日记账生成 Sheet17.Cells(j, 13) = data(i, 7) '复制凭证信息到日记账中 k = k + 1 '增加计数器,表示生成了一条日记账记录 ElseIf data(i + 1, 4) <> "" Then '如果下一行不为空,则生成下一行日记账记录 nonEmptyRow = i + 1 '记录非空行号 j = j + 1 '增加当前行号 Sheet17.Cells(j, 6) = data(i + 1, 4) '复制数据到日记账中 Sheet17.Cells(j, 7) = data(i + 1, 6) Sheet17.Cells(j, 8) = data(i + 1, 16) Sheet17.Cells(j, 9) = data(i + 1, 17) If data(i + 1, 8) = "" Then Sheet17.Cells(j, 10) = data(i + 1



VBA运行速度慢可能由多种原因造成。以下是一些建议,帮助您优化VBA代码和提高运行速度:
避免使用循环:避免在代码中使用大量循环,尤其是嵌套循环。尽量使用更高效的方法,如使用数组或字典进行批量操作。
减少API调用:VBA中的API调用会导致额外的开销,尽量减少使用。如果在代码中使用了大量的API调用,可以考虑对其进行优化或简化。
优化查找和替换操作:当需要在大量数据中进行查找和替换时,可以考虑使用更快速的方法,如使用数组或使用Find和Replace功能。
使用变量缓存:将需要频繁访问或计算的数值存储在变量中,避免重复读取或计算,提高运行效率。
禁用自动计算:在使用大量公式计算的情况下,可以将自动计算功能禁用,待代码执行完毕后再手动计算。
使用事件触发:避免使用频繁的轮询操作,可以使用事件触发机制,只在需要时才执行相应的操作。
合理使用屏幕更新:在操作大量数据时,可以暂时关闭屏幕更新,待操作完成后再重新开启,避免不必要的刷新,提高效率。
避免不必要的文件读写:尽量减少对磁盘的频繁读写操作,可以考虑将数据加载到内存中进行处理。
使用合适的数据结构和算法:根据实际需求选择合适的数据结构和算法,例如使用哈希表优化查找操作。
最重要的是,对于具体问题,您需要进行具体的分析和调试,确定代码中存在的瓶颈,并针对性地优化。可以使用性能测试工具测量不同部分的耗时,在优化代码之前确保您了解哪些部分是最消耗时间的。

你这个速度慢应该是来自于FOR循环中大量的对表控件的操作导致的(包括但不限于对表单元的读取、赋值、比较)
对控件属性的操作是较为影响效率的,如果数据较少还不太明显,如果数据较多就会越发明显。优化的方式,可以将表控件中的必要关键内容预读取,至二维数组。然后对二维数组进行相关的计算操作。最后将结果一次性赋值给表。用空间换取时间。


帮我看看大侠们帮我看看啊
无线路由器的WAN口地址默认为192.168.1.1,你的两台路由都是这个地址肯定会冲突的,应该把其中一台的WAN口地址改为别的地址,比如192.168.1.2、192.168.1.0等都可以。你这种接法我没接过,但是前面那位兄弟的接法我搞过。就是第一个路由接猫,第二个路由接第一个路由。

请大侠们帮看看我这个和田玉吊坠总质量19.39g,是真正的和田白玉吗?是什...
玉质较疏松、光泽呈现玻璃光,是青海料,无雕刻价格在100-200元间,当个小玩意吧

大侠们来帮我看看我的这个配置是不是太低了 玩不了剑网三啊
这配置跟我妈拿来斗地主那台机子差不多,玩剑三就别想了。玩剑三,起码内存1G,显存512起步,这还只是能正常运行游戏的要求。

大侠们看看这是个什么东西,起什么作用?
这是220V接入、整流滤波电路,中的保护元器件,和旁边蓝色的压敏电阻的意思一样均是保护功效的作用,而这个配件的名称是过压保护二极管。也是为了检测电压异常从而保护后级电路的正常的原件。我不知道你这是什么电源板,但是我能看的出来这个电路的结构基本上就接入220AC后,电压直接接入到保险检测电压电流...

杜鹃花 请看大侠们看看我的杜鹃怎么了? 叶片干枯,这是常见的杜鹃现象...
是生理缺水了 不过根系不一定缺水 一般在温度较高时会出现这个症状 因为杜鹃的叶片比较薄 温度一高蒸发量比较大 而根系相对来说不是很发达 导致水分供应不足 所以出现这种情况,需要一天大约2-3次叶面喷水 已经发病的需要兑一点甲托800或者多菌灵800倍 可以有效预防伤口处感染 不要放在阳关直射的地方 ...

大侠们我电脑配置不行了! 大家帮我看看我这配置需要怎么升级!
我建议主板都一起换了。换成AM3平台的,内存1333的 图示是我目前的配置,用起来还行,电源是航嘉300W 显卡是影驰的9600GT加强版 你也可以在这个基础上再升级一下 比如CPU上X250 。显卡上9800GT、GTS250 硬盘就买新的320G以上的 我的1500配的,升级上面的大概多花200多一点,...

请个位大侠帮我看看我的命数本人生于1991农历7.16酉时
请个位大侠帮我看看我的命数本人生于1991农历7.16酉时 20  我来答 1个回答 #热议# 网文质量是不是下降了?clming1988 2009-05-07 · TA获得超过1077个赞 知道大有可为答主 回答量:1654 采纳率:33% 帮助的人:872万 我也去答题访问个人页 关注 ...

大侠们帮我看看这个程序吧!!谢谢
TC 的绘图程序。不能用别的编译器。include <graphics.h> TC 的绘图函数头文件。宏定义 X(a,b,c) 为a,b,c 的函数:x=a*cos(b*c*pi\/180-pi\/2)+300;凡X(a,b,c) 替代为 x=a...宏定义 #define Y(a,b,c) 替代为 y=a*sin(b*c*pi\/180-pi\/2)+240;宏定义 #define d(a,...

请大侠们看看这是什么问题
如果上面说的检查都没问题,可以试试下面的方法:看看能不能解决。◆开始→运行→输入cmd→回车,在命令提示符下输入下面命令 for %1 in (%windir%\\system32\\*.dll) do regsvr32.exe \/s %1回车。完成后,在输入下面的 for %i in (%windir%\\system32\\*.ocx) do regsvr32.exe \/s %i 回车。...

大侠帮我看看我的电脑
Windows优化大师、360安全卫士等软件都可以方便、安全的设置,在此就不谈了。呵呵,也许有一天Z武器也有自启动项目管理,我再来详细说点。7、一些注册表的修改项。Z武器将要发布V2.20版内置的优化武器已经一键干完了,不再罗嗦啦。8、说句风凉话 我一天启动次数不超过2次,基本一天24小时就一次开机关机...

莱山区17643065176: VBA代码运行速度慢,怎么优化 -
脂亨复方: Sub 筛选() ' ' 筛选 宏 ' ' 快捷键: Ctrl+f ''筛选 宏自动生成Sheets("小型建筑表 (打印)").Rows("5:5").AutoFilterActiveSheet.Range("$A$5:$SW$184").AutoFilter Field:=6, Criteria1:="<>0", _Operator:=xlOr ActiveSheet.Range...

莱山区17643065176: 提高VBA循环的运行速度,谢谢朋友了 -
脂亨复方: 1) 首先, 运行慢不一定是程序运行问题, 有可能是你的工作表公式太多, 每次写入单元格的值都要刷新一次所有的公式,而导致慢, 你可以试把有公式的单元格变为数值2) 建议你用 With 代码更精简,更快, 例如:with Sheets("②Count ...

莱山区17643065176: Excel VBA运行越来越慢,怎么提速 -
脂亨复方: VBA代码提速常用的方法主要有: 1. 让代码"专注"运行 例如:将Application.ScreenUpdating设定为False,关闭屏幕更新 2. 单元格(区域)写法的选择 单元格(区域)写法有3种,以A1单元格为例,使用Cell对象写法:cells(1,1),运行速度最快 3. 使用With语句 with语句不仅仅是简化了写法,速度也大大提升了. 4. 尽量不用Variant类型 这不用多说吧,使用Option Explicit是一个好习惯.

莱山区17643065176: Excel 代码运行速度太慢,求助用字典代码提速 -
脂亨复方: 你是说VBA代码运行太慢吗?1. 如果是大量遍历,字典肯定可以提速,但是你这个问题太笼统了,没办法回答,请上传图片或者附件.代码就是设置和操作字典,要根据实际情况修改.2. Set Dic = CreateObject("Scripting.Dictionary")'设置 Dic.Add'添加 Key = Dic.keys'取key遍历3. 如果是VBA运行的时候太卡了,可以考虑【DoEvents '释放操作权限】,但是速度不会加快

莱山区17643065176: VBA代码运行太慢,求优化代码提升速度,谢谢! -
脂亨复方: 问题1:For i = 1 To 400If Sheets("支持度").Cells(4, i) Like Sheets("查询表过度表").Cells(2, 1) Then 需要比较Sheets("支持度")的第1-400列数据?有这么多列?循环次数直接与运算量相关.总循环次数是各层循环次数的乘积,所以应根据实际行、列确定各层循环次数(最小).问题2:各表的数据可以先存入数组,并用数组进行处理,比直接读取单元格值提高速度N倍.比如语句:arr=Sheets("支持度").range("A4:D4"),可以将区域数据存入数组arr 其中arr(1,1)=A4,arr(1,2)=B4,arr(1,3)=C4,arr(1,4)=D4

莱山区17643065176: Excel vba运行太慢,怎么提速? -
脂亨复方: 我看出问题了,数据多的时候,隐藏的操作会很慢.加快速度有两个途径: 第一个简单点,for i=11 ti h的循环不要检查cells,而是先把第5列内容存放在数组里面,在数组里面检查是否应当隐藏.进行隐藏的算法也优化了一点,就是先根据是否...

莱山区17643065176: VBA/VBE Excel 宏 执行速度慢的问题 -
脂亨复方: 这个处理有问题:首先你要限制刷新 application.screenupdating = false....application.screenupdating = false 其次你要关闭自动计算,然后处理速度会明显提升.

莱山区17643065176: excel vba 运行速度慢 -
脂亨复方: 1、使用application.screenupdate,先关闭屏幕更新,结束时打开;使用application.EnableEvents,先关闭事件的触发,结束时再打开2、楼上金融系统说的很好,使用SpecialCells选择方法,可以剔除许多不需要的数据3、尽量少使用单元格直...

莱山区17643065176: 求高手简化我这初学的的VBA代码.现在计算1550行1列的数据要1分钟才完成 -
脂亨复方: 计算慢的原因是:你的Excel中存在的大量的公式,而你每次使用VBA语句像表中写入数据时Excel会自动重新计算公式的值,计算完毕后又会刷新屏幕.虽然Excel的公式计算速度很快,但刷新屏幕也会耗时,你写入1000个数据就等于Excel中的...

莱山区17643065176: Excel 如何提高含有VBA的Excel文档的运行速度 -
脂亨复方: 计算的话只能这么做,必须循环到每个单元格,读取数据、进行判断或计算、写入单元格 但是在选择单元格时有省力的办法,就是用SpecialCells方法,直接选取数值单元格,然后循环处理每个选中的单元格,如:set iRng=range("A:A").SpecialCells(xlCellTypeConstants, 1) for each c in iRng c.value = 1 / c.value next 如果我的回答没能帮助您,请继续追问.您也可以向我们团队发出请求,会有更专业的人来为您解答.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网