Excel VBA:使用RowHeight循环设置范围的可见性

时间:2017-09-22 10:17:18

标签: excel vba excel-vba

我有兴趣在我的工作簿上显示/隐藏多个范围。通常情况下,我只测试范围是否已隐藏,并将以下内容设置为true或false rng.EntireRow.Hidden

我想让我的项目感觉更像是一个应用程序(是的,我知道excel可能不是最适合它的地方,但是关注像这样的小细节是我的事情)。以下是我想要做的一个例子。它可以工作,尤其是在干净的工作表/工作簿上。问题是,在我尝试使用它的工作簿上,工作表上已经有大量的数据/格式/形状。这导致"跳过"在循环的平滑性。我尝试了不同的步骤,但似乎没有什么能解决它。为了看到任何动画,DoEvents是必要的。

如果有人知道如何完成这项工作,或者如果有可能,那就太棒了。谢谢!

Sub testView()

Dim rng As Range
Dim i As Integer

With ActiveSheet
    Set rng = .Range(.Cells(1, 1), .Cells(20, 1))
    If rng.EntireRow.Hidden = True Then
        For i = 1 To 15 Step 1
            rng.EntireRow.RowHeight = i
            DoEvents
        Next i
    Else
        For i = 14 To 0 Step -1
            rng.EntireRow.RowHeight = i
            DoEvents
        Next i
    End If

End With

End Sub

1 个答案:

答案 0 :(得分:1)

出于教学原因(主要是图表动画),我在Excel中做了很多动画。我有时使用以下子的变体:

Sub Pause(delay As Double)
    Dim start As Double
    start = Timer
    Do While Timer < start + delay
        DoEvents
    Loop
End Sub

然后在主代码中,在您当前拥有Pause 0.10之后(或代替)DoEvents之类的内容。技术含量低,但有时会有所帮助。