Vba 基于单元格值隐藏行
我有一个项目和数量表,当数量为0时,我想在其中隐藏行。宏可以工作,但需要太长时间才能完成 代码如下:Vba 基于单元格值隐藏行,vba,excel,Vba,Excel,我有一个项目和数量表,当数量为0时,我想在其中隐藏行。宏可以工作,但需要太长时间才能完成 代码如下: Sub Hide2ndFix() ' ' Hide2ndFix Macro ' BeginRow = 414 EndRow = 475 ChkCol = 24 For RowCnt = BeginRow To EndRow If Cells(RowCnt, ChkCol).Value = 0 Then Cells(RowCnt, ChkCol).
Sub Hide2ndFix()
'
' Hide2ndFix Macro
'
BeginRow = 414
EndRow = 475
ChkCol = 24
For RowCnt = BeginRow To EndRow
If Cells(RowCnt, ChkCol).Value = 0 Then
Cells(RowCnt, ChkCol).EntireRow.Hidden = True
End If
Next RowCnt
'
End Sub
如果X列中的值为0,是否有更有效的方法来获得相同的结果,即隐藏第414-475行?生成任何代码(对工作簿进行任何更改)的常用方法通过禁用
屏幕更新
和禁用事件
并将计算
模式更改为手动
(还有其他方法,但这三种方法的影响最大)
另一件事是通过收集一个联合范围内的所有行在删除和插入行时有很大的影响,因为删除一行所需的时间与删除整个联合范围所需的时间相似。例如,如果删除一行需要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
问题可能是每个循环都有计算。代码的行将添加
application.Calculation=xlCalculationManual
,并在末尾添加application.Calculation=xlCalculationAutomatic
这一行的单元格(RowCnt,ChkCol)。EntireRow.Hidden=True
可以缩短为行(RowCnt).Hidden=True
一如既往,您的代码对问题非常简洁。对您正在做的事情进行一点解释将使这成为一个很好的答案,特别是当偏离OPs基本代码时。许多来到这里的人并不完全理解正在发生的事情,一个快速的解释可以帮助他们在未来自助。@ScottCraner,我的问题是我用谷歌翻译用英语写:)。但我会尽力解释我所做的修改,希望不要写错任何东西。我理解,尽你最大的努力,如果你不介意,其他人会帮助正确的语法更正。我们只是不想假设你的意图。@ScottCraner,谢谢你的精彩编辑,现在我的答案是正确的英语:)。我的谷歌翻译attemp--Rica ederim。我希望我不是在骂你。