我对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引擎必须进行内部检查,以免它不必要地做任何事情。
答案 0 :(得分:5)
我想我知道有人制作你分析的代码的原因。这种情况的根源可能来自 Bovey,Rob / Wallentin,Dennis / Bullen,Stephen / Green,John的标题:“专业Excel开发:使用Microsoft Excel和VBA开发应用程序的权威指南,以及.NET “您可以在互联网上找到哪些章节(或完整版)。有一章致力于微观和宏观优化。让我引用一个引用你的问题:
在设置之前测试属性
读取它通常要快得多 财产比写它。它可以节省仅更新属性的时间 当它需要改变时,通过检查它是否具有所需的值 第一。例如,仅读取Range.Font.Bold的值 如果它已经是True,则将其设置为True。这与之相矛盾 减少你编写的代码量的一般规则,但它会 如果它允许您避免,则提供显着的性能提升 不必要地设置属性。
我不会确认它的真实与否。但我更信任这本书的作者。
答案 1 :(得分:1)
这可能是一项无用的检查。除非在隐藏特定列/行时涉及其他一些逻辑,否则我没有太多理由要求您进行额外检查。