VBA Excel 2007 帮助加快代码以隐藏行

VBA Excel 2007 帮助加快代码以隐藏行

我正在尝试编写一个 VBA 代码,如果行中的值等于“”,则自动隐藏行。我的值范围是 A37:A400。由于我的范围太大,我以前的 VbA 太慢了,一次只查看一行。有没有办法编写一个快速代码,可以快速浏览这个大列表并隐藏行。现在隐藏行大约需要一分钟,这太长了。

Sub HideRows()
    Dim cell As Range
    For Each cell In Range("A37:A400")
        If Not IsEmpty(cell) Then
            If cell.Value = "" Then
                cell.EntireRow.Hidden = True
            End If
        End If
    Next
End Sub

答案1

尝试Application.ScreenUpdating = False在隐藏代码之前添加,并Application.ScreenUpdating = True在隐藏代码之后添加。通常,此技巧可将大多数 VBA 宏的速度提高约 10 倍,因为应用程序不必在代码运行时不断重新绘制自身。

这应该对您的情况有所帮助,因为您正在单独检查每个单元格并单独隐藏行,而不是批量隐藏行。

答案2

我根本不知道你的代码是怎么工作的。

您有以下两行

If Not IsEmpty(cell) Then
        If cell.Value = "" Then

如果第一行不为空,则第二行将始终返回 false。第一行表示“如果单元格不为空”,下一行表示“如果行是空”... 好吧,它已经被评估为不为空。因此,您永远无法隐藏行,所以我不知道您的代码是如何工作的 - 我怀疑代码之外还有其他事情发生,但是...

但是,这在我的计算机上运行良好

Sub Button1_Click()
Dim cell As Range
    For Each cell In Range("A1:A1600")
        If cell.Value = "" Then
            cell.EntireRow.Hidden = True
        End If            
    Next
End Sub

我有 1600 行,执行需要 5 秒左右

相关内容