哪种方法最有效?
Sub pvaSetWeek(Optional weekOffset As Long = 0)
Dim theDayToday As Long
theDayToday = Weekday(Now, vbMonday)
'Set start to Monday
Range("pvaStartDate") = Int(Now) - (theDayToday - 1) - (weekOffset * 7)
'Set end to Sunday
Range("pvaEndDate") = Int(Now) + (7 - theDayToday) - (weekOffset * 7)
End Sub
或
Sub pvaSetWeek(Optional weekOffset As Long = 0)
'Set start to Monday
Range("pvaStartDate") = Int(Now) - (Weekday(Now, vbMonday)- 1) - (weekOffset * 7)
'Set end to Sunday
Range("pvaEndDate") = Int(Now) + (7 - Weekday(Now, vbMonday)) - (weekOffset * 7)
End Sub
为什么?
编辑添加:我通常采用第一种方式,因为它更容易阅读/调试,并且如果相同的值需要使用多次,显然可以更好地扩展,但是值可能只使用了几次我经常想知道是否有任何惩罚,无论多么小,以某种方式做事。
答案 0 :(得分:2)
其他答案都很好。
我想指出的是,SO包含许多“Y比Y更有效吗?”这一形式的问题,比如“Is ++我比i ++更有效率吗?”或“内联函数调用是否更有效?”。答案是,最常见的是,正如一些撰稿人指出的那样,例如“理发减肥”。
当然它可能确实有所作为,但不要认为它会产生重大影响,直到你证明它在你的情况下。
答案 1 :(得分:1)
第一种方法在可读性方面肯定更好。我更喜欢它。
在我看来,一个变量赋值不会是明显的开销。此外,您正在编写VBA而不是某些时间/关键任务处理器类型的汇编代码,这意味着您最大的担心应该是代码的可维护性,而不是微不足道的理论计算时间效率。
答案 2 :(得分:0)
这似乎是一个陈腐的答案......但你试过计时吗?如果没有“重大差异”*那么可以解决更易读/可维护的问题。
**我会留给你的。
答案 3 :(得分:0)
我认为有些“重构”可用。这个怎么样?
Sub pvaSetWeek(Optional weekOffset As Long = 0)
Dim TheDateToday as byte, lngRangeBase as Long, lngRangeStart As Long, lngRangeEnd As Long
TheDateToday = Weekday(Now, vbMonday)
lngRangeBase = (weekOffset * 7)
lngRangeStart = - ((theDayToday - 1) - lngRangeBase )
lngRangeEnd = (7 - theDayToday) - lngRangeBase
'Set start to Monday
Range("pvaStartDate") = Int(Now) + lngRangeStart
'Set end to Sunday
Range("pvaEndDate") = Int(Now) + lngRangeEnd
End Sub