2

这是我的第一篇文章,所以如果我需要进行任何更改,请告诉我。

我找到了一些优化循环的方法示例,但我似乎无法将它们中的任何一个有效地应用于我的代码。我要做的是在单列中循环大约 170 个单元格,并根据单元格值是否为 0 隐藏或显示整行。

我希望每次激活某些工作表时都运行代码。现在这段代码运行大约需要 4 秒。似乎它应该比这快得多!这就是我来这里寻求帮助的原因。

这是我正在使用的代码(FormatSheet 返回一个 BOOLEAN,其中 True 表示可以在此表上执行此代码,而 False 表示跳过在此表上执行此代码:

Private Sub mobjWb_SheetActivate(ByVal Sh As Object)

Dim r As Long
Dim z As Long
Dim varray As Variant

Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Application.DisplayStatusBar = False
Application.EnableEvents = False
ActiveSheet.DisplayPageBreaks = False

If Not FormatSheet(Sh) Then
Exit Sub
End If

Set varray = Range("$F$1", Cells(Rows.count, "F").End(x1up)).Value


For Each r In varray

z = r.Value
If z = 0 Then
Range("F" & r).EntireRow.Hidden = True
    Else
    Range("F" & r).EntireRow.Hidden = False
End If
Next r


Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Application.DisplayStatusBar = True
Application.EnableEvents = True
ActiveSheet.DisplayPageBreaks = True


End Sub
4

3 回答 3

0

我认为最快的方法可能是使用自动过滤器。使用值 <> 0 设置自动过滤器,瞧!

于 2019-10-08T15:01:24.850 回答
0

一件事可能会加快速度。我不会使用z变量。您可以对现有的r执行相同的操作。

For Each r In varray
If r.Value = 0 Then
    Range("F" & r).EntireRow.Hidden = True
Else
    Range("F" & r).EntireRow.Hidden = False
End If
Next r
于 2015-12-08T22:05:29.140 回答
0

有几个非常细微的变化:

Sub qwerty()
   Dim r As Range
   Dim z As Long, N As Long
   Dim varray As Range

   Application.Calculation = xlCalculationManual
   Application.ScreenUpdating = False
   Application.DisplayStatusBar = False
   Application.EnableEvents = False
   ActiveSheet.DisplayPageBreaks = False

   N = Cells(Rows.Count, "F").End(xlUp).Row
   Set varray = Range("F1:F" & N)

   For Each r In varray
      z = r.Value
      If z = 0 Then
         r.EntireRow.Hidden = True
      Else
         r.EntireRow.Hidden = False
      End If
   Next r

   Application.Calculation = xlCalculationAutomatic
   Application.ScreenUpdating = True
   Application.DisplayStatusBar = True
   Application.EnableEvents = True
   ActiveSheet.DisplayPageBreaks = True

End Sub

跑得很快

于 2015-12-08T22:03:27.637 回答