我有一个项目和数量表,我想在数量为0时隐藏行。宏工作,但完成时间太长。
这是代码:
void entry::entry_operate() { /* ... */ }
如果X列中的值为0,是否有更有效的方法来获得相同的结果,隐藏行414-475?
答案 0 :(得分:3)
更快地制作任何代码(对工作簿进行任何更改)的常用方法是禁用screen updating
并停用events
并将calculation
模式更改为Manual
(还有其他方法,但这三件事最重要)。
另一件事是收集一个联合范围内的所有行在删除和插入行时有一个很大的因素,因为删除一行所需的时间与删除整个联合范围的时间相似。例如,如果删除一行需要1秒,则删除1000行将需要1000秒,但删除包含1000行的联合范围只需要1秒。
试试这段代码:
Sub Hide2ndFix()
'
' Hide2ndFix Macro
'
Dim RowCnt As Long, uRng As Range
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
BeginRow = 414
EndRow = 475
ChkCol = 24
For RowCnt = BeginRow To EndRow
If Cells(RowCnt, ChkCol).Value = 0 Then
If uRng Is Nothing Then
Set uRng = Cells(RowCnt, ChkCol)
Else
Set uRng = Union(uRng, Cells(RowCnt, ChkCol))
End If
End If
Next RowCnt
'
If Not uRng Is Nothing Then uRng.EntireRow.Hidden = True
Application.ScreenUpdating = True
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
End Sub