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

温馨提示:内容为网友见解,仅供参考
第1个回答  2011-09-06
问题是这样的 除了上面提到的关闭更新外,最主要的是你按钮里面代码里面有个隐藏的功能,这样每次你隐藏了一下 工作表就变化了 那么就要执行一下你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 在线说吧

相似回答