6

我对VBA相当陌生。我正在处理一个 Excel 项目,并且我一直在项目中看到如下所示的代码:

If Me.Columns(i).Hidden = True Then
    Me.Columns(i).Hidden = False
End If

和这个:

If Range("SomeRange").Locked = True Then
    Range("SomeRange").Locked = False
End If

特别是在这些情况下,是否有任何理由在设置之前检查属性是否已设置,或者这只是无用的检查?当然,VBA 引擎必须进行内部检查,以便它不会做任何不必要的事情。

4

2 回答 2

5

我想我知道有人制作您分析的代码的原因。这种情况的来源可能来自Bovey、Rob/Wallentin、Dennis/Bullen、Stephen/Green、John 的书,标题为:“Professional Excel Development: The Definitive Guide to Developing Applications Using Microsoft Excel and VBA, and .NET”,其中章节(或完整)您可以在 Internet 上找到。有一章专门介绍微观和宏观优化。让我引用一个与您的问题有关的内容:

在设置属性之前测试它

读取属性通常比写入属性快得多。它可以节省时间,只在需要更改时才更新属性,方法是先检查它是否具有所需的值。例如,读取 Range.Font.Bold 的值并仅在它不是 True 时将其设置为 True。这与减少您编写的代码量的一般规则相矛盾,但如果它允许您避免不必要地设置属性,它将提供显着的性能提升。

我不会确认它是否真实。但我更相信这本书的作者。

于 2013-07-30T19:51:25.117 回答
1

这可能是一个无用的检查。除非在隐藏特定列/行时涉及其他一些逻辑,否则我看不出为什么要进行额外检查的太多理由。

于 2013-07-30T18:04:35.040 回答