根据标准加快隐藏/取消隐藏行

时间:2015-08-21 23:53:45

标签: excel vba

下面的我的宏检查一行中的25行左右 行中有一个名为start的代码,然后检查每个单元格 “0”如果找到“0”则该行被隐藏。此代码有效,但需要更长时间 我想要。我正在寻找一种加速宏的方法

您可以在此处找到我的电子表单的示例 https://drive.google.com/file/d/0B6lproNRrpS3UDMyUlNmN0d6SDQ/view?usp=sharing

Sub Button16_Click()
    Application.ScreenUpdating = False
    ActiveWorkbook.PrecisionAsDisplayed = False
    Application.Goto Reference:="start"


    Do While Not "end" = wwActiveCellName2
        If Selection = "0" Then
            Selection.EntireRow.Hidden = True
        End If
        Selection.Offset(1, 0).Select
    Loop

End Sub

Function wwActiveCellName2() As String
    On Error GoTo e1
    wwActiveCellName2 = ActiveCell.Name.Name
    Exit Function
    e1:
    wwActiveCellName2 = ""
End Function

2 个答案:

答案 0 :(得分:2)

批量操作几乎总是比循环和比较单个单元更快。您为AutoFilter Method提供了一个不错的开始和结束。

CREATE TRIGGER loadprefix
ON Items
FOR INSERT 
AS 
  BEGIN 
      UPDATE Items 
      SET    ItemNumber = 'ITEM-' + CONVERT(VARCHAR, (SELECT Number FROM inserted)) 
      WHERE  Number = (SELECT Number 
                   FROM   inserted) 
  END

AutoFilter需要列标题单元格。如果 start 不是标题标签,并且应包含在零检查的条件范围内,请使用偏移版本(假设 start 尚未在第一行中)。

答案 1 :(得分:0)

不要使用选择。选择机制很慢。 使用变量来存储正在扫描的当前单元格

相反尝试这个

Sub Button16_Click()
    Application.ScreenUpdating = False
    ActiveWorkbook.PrecisionAsDisplayed = False
    Application.Goto Reference:="start"

    Dim curs As Range  
    Set curs = ActiveCell

    do while wwActiveCellName2(curs) <> "end"
        if curs.Value = "0" then
            curs.EntireRow.Hidden = True
        end if
        set curs = curs.offset(1,0)
    loop

end sub


Function wwActiveCellName2(curs As Range) As String
    On Error GoTo e1
    wwActiveCellName2 = curs.Name.Name
    Exit Function
e1:
    wwActiveCellName2 = ""
End Function