【发布时间】:2012-02-25 18:44:42
【问题描述】:
我正在使用循环来填充集合。集合的每个项目都有一些属性,但其中一些属性是可选的。系统会提示用户选择将哪些属性复制到集合中。如果用户选择忽略它们,是否可以省略可选属性的代码?
Sub fillcoll()
Dim coll as Collection
Set coll = New Collection
Dim NewItem as Class1
For each r in Selection.Rows
Set NewItem = New Class1
If Userform1.Checkbox1.Value = True then
NewItem.Property1 = somearray1(r.Row)
End If
If Userform1.Checkbox2.Value = True then
NewItem.Property2 = somearray2(r.Row)
End If
If Userform1.Checkbox3.Value = True then
NewItem.Property3 = somearray3(r.Row)
End If
Next r
End Sub
使用此代码,在每次迭代时都会读取 Checkboxes 的值。我担心这可能会不必要地减慢程序的执行速度。复选框可以被读取一次,循环的内容将适应复选框的值。这可能吗?
提前致谢。
【问题讨论】:
-
“我担心这可能会不必要地减慢程序的执行速度。”害怕还是知道?问之前你检查过自己吗?除非您知道必须优化,否则不要优化。如果你不知道,那就找出来。
-
如果您有一个涉及 10,000 次迭代的后台进程,那么每次迭代节省一到两微秒是值得的。但是您的用户必须阅读屏幕、做出决定、移动手指、按键和单击鼠标。用户永远不会注意到节省的时间。
-
我同意 JCM 和 Tony 的观点。你可能只是担心一些可能根本不存在的事情。顺便说一句 somearray1,2,3 做什么?此外,您可能想读取数组中的范围,然后循环遍历它,而不是循环行本身。这也会提高循环的速度。
-
谢谢大家。我只是想知道是否有我不知道的编程技术。