VBA运行缓慢问题,各位高手指点

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VBA运行缓慢问题,各位高手指点相关的知识,希望对你有一定的参考价值。

Private Sub CommandButton1_Click()
Dim i, j As Integer
j = 0
For i = 6 To 32
If Cells(i, 6) = 0 Then
j = j + 1
Cells(i, 6).EntireRow.Hidden = True
End If
Cells(i, 1) = i - j - 5
Next
End Sub
Private Sub worksheet_change(ByVal target As Range)
Dim i As Integer
For i = 6 To 32
If Cells(i, 6) = 0 Then
Cells(i, 6).EntireRow.Interior.Color = vbGreen
Else: Cells(i, 6).EntireRow.Interior.Pattern = xlNone
End If
Next
End Sub
我只是在一个sheet1运行以上代码,按command1按钮时,执行异常缓慢,然而当把Else: Cells(i, 6).EntireRow.Interior.Pattern = xlNone这句去掉时,执行速度就正常了,求教各位高手啊,为什么会出现这种情况~~~~

姑且不考虑代码的合理性,从代码运行上来讲,我个人觉得你应该加屏幕刷新的关闭和开启功能
即,代码的第二行,定义变量前加上一行
application.ScreenUpdating=False

这样可以关闭屏幕刷新
在end sub前一行加入
application.ScreenUpdating=true
打开屏幕刷新,相信你会有不错的速度提升追问

是快了很多,但是,刷新的是不是太多了点?闪的频率太高了点~~~

追答

application.ScreenUpdating=False
这一行就是关闭的刷新,要放在代码运行的最前面。
如果加了这个,怎么可能还有刷新呢?检查你加代码的位置。

追问

就是加在了定义变量的前面,位置肯定没问题,我刚刚试着把开启屏幕刷新的那行代码删除,效果好道爆...不理解为什么呀

追答

让你说的我也不理解了。
代码本身就是关闭刷新。结果还闪,俺从来没遇到过。
效果好道爆,不懂这是啥意思

追问

效果好到爆,就是运行速度实在是好的不行~~~~但是我真的不理解为什么一定要去掉开启屏幕刷新,之前那个代码执行缓慢的原因又是什么?我对VBA涉猎不深,一直是用VB在操作~~~

追答

你用vb啊,那你应该比我更懂才对。
前台运行和后台运行的性质相似。
你每做一次操作让每一步的操作效果都表现出来,和一直后台操作,最终产生结果后才一次性产生出来。这二者的区别,我想你了解的。

追问

这个能理解,只是我最后并没有开启屏幕刷新,怎么还会有结果输出显示~~~要不我加你QQ吧...对于这个VBA我实在是有蛮多疑惑的...我的是893275988

追答

最后你没开启,也因为end sub的缘故,结束了代码,恢复到了操作界面。
所以结果还是显示出来了
我的vba也是新手刚接触不久,是超菜鸟,如果需要我的是 63639139

参考技术A 问题是这样的 除了上面提到的关闭更新外,最主要的是你按钮里面代码里面有个隐藏的功能,这样每次你隐藏了一下 工作表就变化了 那么就要执行一下你WORKSHEET里面 就是你按钮里面有个 I 满足条件的时候 那么 sheetchange里面 I 就要循环一遍
我建议worksheet_change事件可以不可以不要 在按钮代码后面加一个For each 来判断一下 来替代worksheet change事件追问

谢谢~~~但是现在还有个疑问,我把同样的代码放入sheet2中,怎么会没有任何效果显示呢?

追答

我把你代码复制了 测试一下 貌似速度还可以接受哇
你代码是方的CHANGE事件吧
其实SHEETchange时间的触发 你是按钮里面最好那句话触发的 sheet2里面表是不是没有变化 就没触发change事件?
还有你上面的闪 不是更新的问题 是比隐藏行 看上去像刷新哇

追问

本来sheet2中单元格的变化,是通过sheet3中的相关单元格变化触发的,我变动sheet3中的单元格值,然后sheet2中的单元格值是变化了,但是我用单元格所在的那一行颜色并没有变为绿色...后来我又手动改动sheet2中的单元格数值,发现颜色还是没有任何变化...不明白为什么?

追答

哎 小姑娘 那文件保密么 可以G21-YANG@163.COM 来瞅瞅么 不看我也不晓得怎么回事啊
追问要财富的 HI 在线说吧

excel vba sql 占用内存,因为如下查询的sql语句较多,每次运行完都要耗用很多内存,求高手指点。谢

Sub 自定义明细()
Dim sht As Worksheet
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim Sql$, E$, F$
Dim strcn As String
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset

'总收入
strcn = "provider=microsoft.jet.oledb.4.0;extended properties='excel 4.0;hdr=yes';" _
& "data source=" & ThisWorkbook.Path & "\效益分析 基础数据.xlsm"

cn.Open strcn
Sql = "SELECT sum(结帐金额) FROM [辅检收入$] "
Sql = Sql + " where 年份='2012年'"
Sql = Sql + " and 核算科室名称='妇产科'"
Sql = Sql + " group by 月份"
Sql = Sql + " order by 月份"
rs.Open Sql, cn
Set sht = ActiveWorkbook.Worksheets("妇产科1")
ActiveWorkbook.Worksheets("妇产科1").[B3:B14].ClearContents
Sheets("妇产科1").[B3].CopyFromRecordset rs
rs.Close
cn.Close
Set cn = Nothing
Set rs = Nothing

MsgBox "查询完毕"
End Sub

参考技术A 就1条查询语句,怎么会太多呢,你的extended properties='excel 4.0 这个是不是有问题,怎么版本号是4.0

以上是关于VBA运行缓慢问题,各位高手指点的主要内容,如果未能解决你的问题,请参考以下文章

请各位高手指点,我的系统XP(SP2),有如下43个进程,那一些可以安全结束.

arduino 串口如何数据提取变量,请各位高手指点

abaqus出现警告信息,请教高手指点

页面如何默认div的横向滚动条居中或者是居右呢?请各位高手指点!

用VBA条件锁定EXCEL单元格的问题,高手进!

jsp多条件查询问题,请高手指点迷津!