有没有办法在VBA中覆盖Now()以进行测试?这里有类似的东西 - What's a good way to overwrite DateTime.Now during testing?,但对于VBA。
因此,我需要Now()
来返回预定义的值而不是当前的PC时间。
我所做的不想要的是这样的:
Option Explicit
Public Function NowDefined() As Date
'NowDefined = Now()
NowDefined = Format("2016-01-15 15:01:01", "yyyy-MM-dd hh:mm:ss")
End Function
只需将整个代码Now()
更改为NowDefined()
。
答案 0 :(得分:3)
不是创建Function Now() As Date
Now = DateSerial(2016, 1, 15) + TimeSerial(15, 1, 2)
End Function
变量然后让Excel尝试将其转换为{{1}},而是最好生成实际开始日期:
{{1}}
答案 1 :(得分:2)
Vityata的answer有效,但它有点脆弱,可能会变得很麻烦:你必须记得在完成测试后删除或注释掉整个函数声明;并在需要进行更多测试时将其重新放入...然后在释放时再次将其删除......等等。
我会做这样的事情:
Const IN_TESTING_MODE As Boolean = True ' Set this to false when done testing
Function Now() As Date
If IN_TESTING_MODE Then
Now = ... 'whatever date you want
Else
Now = VBA.Now() ' back to default behavior
End If
End Function
在这里你只需改变一个进入和退出测试模式的东西:常量IN_TESTING_MODE
的值。您可以在其他函数中重用此常量,以及在测试时您想要不同的行为。
答案 2 :(得分:1)
实际上这有效:
Option Explicit
Public Function Now() As Date
Now = Format("2016-01-15 15:01:01", "yyyy-MM-dd hh:mm:ss")
End Function