我正在尝试编写一个 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 秒左右