excel写了一个自动隐藏和自动显示行的宏,但是运行很慢

一个表格1500行,判断i列值为0或1,为零的时候隐藏该行,为1的的时候显示该行
写了一个宏
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
For i = 1 To 1500
If Cells(i, 9) = 0 Then Rows(i).Hidden = True '隐藏该行
If Cells(i, 9) = 1 Then Rows(i).Hidden = False '显示该行
Next
End Sub
但是每次点击这个表格的时候都会计算,并且很慢,请问这是什么原因呢?有什么好的解决办法么?
谢谢!

第1个回答  2015-05-11
SelectionChange事件单选择区发生改变时进行,所以只要你鼠标一点单元格它就运行了
所以如果你并不是时时刻刻需要监视表格的话,建议你改用Worksheet_Activate事件,切换到该表的时候运行一次
第2个回答  2015-05-11
首先,这是个事件处理,有事件自然会运行。
其次,代码操作工作表,就是很慢的。
还有,以下代码可以修改,不过效果应该不会太明显。
If Cells(i, 9) = 0 Then Rows(i).Hidden = True '隐藏该行
If Cells(i, 9) = 1 Then Rows(i).Hidden = False '显示该行
修改成:
If Cells(i, 9) = 0 Then
Rows(i).Hidden = True '隐藏该行
else
Rows(i).Hidden = False '显示该行
endif
这样可以减少一次判断。
第3个回答  推荐于2016-06-25

改改吧,加点东西:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Application.ScreenUpdating = False    '关闭屏幕刷新
    With Target
        If .Column = 9 Then                '如果选择了第9列,那么就进行隐藏过程
            For i = 1 To 1500
                If Cells(i, 9) = 0 Then Rows(i).Hidden = True '隐藏该行
                If Cells(i, 9) = 1 Then Rows(i).Hidden = False '显示该行
            Next
        End If
    End With
    Application.ScreenUpdating = True
End Sub

看看速度快了么。

本回答被提问者采纳
第4个回答  2015-05-11
你总得限制一下点哪列或者点哪个单元才激发这个宏吧?
相似回答