vba - 基于值的慢速宏隐藏行

标签 vba excel

我有一个表格,我想完全隐藏或隐藏/显示表格中的行,具体取决于单元格值是否为 0 或更大。

它在单元格 D26 中查找值 0;如果为 0,则隐藏第 24-51 行,如果不是 0,则根据第 34 行和第 49 行之间的 C 列中是否存在值来隐藏/显示行。

下面的宏太慢了,不是一个可行的选择。任何人都可以提出另一种方法来做到这一点,这可能会在几秒钟而不是几分钟内起作用?我认为这是因为我正在运行 For/If/Else 循环。

Sub HideManifolds()
'
' HideManifolds Macro
'
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual

ChkCol = 3
Manifold1BeginTableRow = 34
Manifold1EndTableRow = 49
Manifold1BeginRow = 24
Manifold1EndRow = 51

    For Manifold1RowCnt = Manifold1BeginRow To Manifold1EndRow
        If Cells(26, 4).Value = 0 Then
            Cells(Manifold1RowCnt, 1).EntireRow.Hidden = True
        Else
            For Manifold1TableRowCnt = Manifold1BeginTableRow To Manifold1EndTableRow
                If Cells(Manifold1TableRowCnt, ChkCol).Value = 0 Then
                    Cells(Manifold1TableRowCnt, ChkCol).EntireRow.Hidden = True
                Else
                    Cells(Manifold1TableRowCnt, ChkCol).EntireRow.Hidden = False
                End If
            Next Manifold1TableRowCnt
        End If
    Next Manifold1RowCnt

Application.ScreenUpdating = True
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
'
End Sub

最佳答案

我认为你不需要这个循环 For Manifold1RowCnt = Manifold1BeginRow To Manifold1EndRow
代码:

Sub HideManifolds()
'
' HideManifolds Macro
'
Dim hRng As Range, vRng As Range

Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual

ChkCol = 3
Manifold1BeginTableRow = 34
Manifold1EndTableRow = 49
Manifold1BeginRow = 24
Manifold1EndRow = 51

        If Cells(26, 4).Value = 0 Then
            Rows(Manifold1BeginRow & ":" & Manifold1EndRow).Hidden = True
        Else
            For Manifold1TableRowCnt = Manifold1BeginTableRow To Manifold1EndTableRow
                If Cells(Manifold1TableRowCnt, ChkCol).Value = 0 Then

                  If hRng Is Nothing Then
                   Set hRng = Cells(Manifold1TableRowCnt, ChkCol)
                  Else
                   Set hRng = Union(hRng, Cells(Manifold1TableRowCnt, ChkCol))
                  End If

                Else

                  If vRng Is Nothing Then
                   Set vRng = Cells(Manifold1TableRowCnt, ChkCol)
                  Else
                   Set vRng = Union(vRng, Cells(Manifold1TableRowCnt, ChkCol))
                  End If

                End If
            Next Manifold1TableRowCnt

            If Not hRng Is Nothing Then hRng.EntireRow.Hidden = True
            If Not vRng Is Nothing Then vRng.EntireRow.Hidden = False

        End If



Application.ScreenUpdating = True
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
'
End Sub

关于vba - 基于值的慢速宏隐藏行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34967785/

相关文章:

excel - 将不同类型的数组传递给 UDF 函数

excel - 在 VBA 中不使用 for 循环而将每行加 1

vba - 以主题作为文件名保存邮件

excel - 如何在 EPPlus 中关闭 Excel 应用程序对象的后台错误检查?

java - 问题编码 java->xls

c# - 使用 Excel 作为日志阅读器。如果 Excel 打开,如何写入日志文件?

vba - 如何使用 VBA 在 Excel 中禁用添加工作表按钮?

vba - 自定义字符串反转顺序 - 配对 2 位数字

sql-server - 从 Excel 连接到 SQL Server 用户定义函数

excel - 通过vba计算包裹单元格中的行数