Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 基于单元格值隐藏行_Vba_Excel - Fatal编程技术网

Vba 基于单元格值隐藏行

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).

我有一个项目和数量表,当数量为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).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。我希望我不是在骂你。