首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有隐藏行的工作表表现得很慢

有隐藏行的工作表表现得很慢
EN

Stack Overflow用户
提问于 2017-04-12 16:14:57
回答 2查看 46关注 0票数 0

由于某种原因,无论何时宏运行,这位女士的表现都非常缓慢。这正在成为问题,因为每次我试图改变信息的未隐藏的单元格,不属于范围,它仍然运行一个更新,并花费近5-10秒来完成。

要使这一问题复杂化,需要对公式进行哪些修改?

代码语言:javascript
复制
Private Sub Worksheet_Change(ByVal Target As Range)

    Dim c As Range


    For Each c In Range("A7:A98")
        If c.Value = 0 And c.Value = vbNullString Then
        c.EntireRow.Hidden = True
        End If
    Next c

    For Each c In Range("A7:A98")
        If c.Value <> 0 And c.Value <> vbNullString Then
        c.EntireRow.Hidden = False
        End If
    Next c

End Sub
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-12 16:29:08

您的逻辑看起来很粗略,很难判断您想要做什么,但是您的逻辑可以被缩短并用于确定布尔.Hidden。

代码语言:javascript
复制
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

    If Not Intersect(Target, Range("A7:A98")) Is Nothing Then
        On Error GoTo safe_exit
        Application.EnableEvents = False
        Dim trgt As Range
        For Each trgt In Intersect(Target, Range("A7:A98"))
            trgt.EntireRow.Hidden = CBool(trgt.Value = vbNullString)
        Next trgt
    End If

safe_exit:
    Application.EnableEvents = True

End Sub
票数 0
EN

Stack Overflow用户

发布于 2017-04-12 16:25:00

像这样的东西应该对你有用:

代码语言:javascript
复制
Private Sub Worksheet_Change(ByVal Target As Range)

    Dim rCheck As Range
    Dim rCell As Range
    Dim rHide As Range
    Dim lCalc As XlCalculation

    Set rCheck = Me.Range("A7:A98")

    With Application
        lCalc = .Calculation
        .Calculation = xlCalculationManual
        .EnableEvents = False
        .ScreenUpdating = False
    End With

    On Error GoTo CleanExit

    If Not Intersect(Target, rCheck) Is Nothing Then
        rCheck.EntireRow.Hidden = False
        For Each rCell In rCheck
            If rCell.Value = 0 And rCell.Value = vbNullString Then
                If rHide Is Nothing Then
                    Set rHide = rCell
                Else
                    Set rHide = Union(rHide, rCell)
                End If
            End If
        Next rCell
    End If

    If Not rHide Is Nothing Then rHide.EntireRow.Hidden = True

CleanExit:
    With Application
        .Calculation = lCalc
        .EnableEvents = True
        .ScreenUpdating = True
    End With

End Sub
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43374700

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档