我有一个从列表生成工作簿的过程。其中一个选项卡具有不同的高度,我的宏使用一个公式来确定是否隐藏一行。
当我移动到下一个工作簿时,我可能需要取消隐藏上一次迭代中隐藏的一些行。为了更好地理解 Excel 并从我的宏中获得更好的性能,我想知道在迭代时利用 Else 条件取消隐藏行是否更快,因为它已经这样做了,或者简单地取消隐藏所有行是否更快在单独的宏中再次行并排除 else 条件。
基本上,很好奇哪个是更优化的过程。起初,我认为使用另一个宏来跳过所有迭代和逻辑,并在根据需要再次隐藏它们之前简单地取消隐藏所有行会更快,但现在考虑它,因为它已经迭代了,我很好奇它实际上更慢。
Sub DoProcess()
Call UnhideRows
Call HideRows
End Sub
Sub UnHideRows()
Call DefineVariables
Sheet1.Rows("13:37").Rows.EntireRow.Hidden = False
End Sub
Sub HideRows()
Call DefineVariables
For x = 13 to 37
If Sheet1.Cells(x,7).Value = "Hide"
Sheet1.Cells(x,7).EntireRow.Hidden = True
End If
Next
End Sub
或者用这种方法来完成这个任务是否更好:
Sub HideUnhideRows()
Call DefineVariables
For x = 13 To 37
If Sheet1.Cells(x, 7).Value = "Hide" Then
Sheet1.Cells(x, 7).EntireRow.Hidden = True
Else
Sheet1.Cells(x, 7).EntireRow.Hidden = False
End If
Next
End Sub
最快的方法是合并所有需要隐藏的行:
Sub HideRows()
Dim rows2Hide As Range
Call DefineVariables
Sheet1.Range("G13:G37").EntireRow.Hidden = False
For x = 13 To 37
If Sheet1.Cells(x, 7).Value = "Hide" Then
If rows2Hide Is Nothing Then
Set rows2Hide = Sheet1.Cells(x, 7)
Else
Set rows2Hide = Union(rows2Hide, Sheet1.Cells(x, 7))
End If
End If
Next
If Not rows2Hide Is Nothing Then
rows2Hide.EntireRow.Hidden = True
End If
End Sub