我有一些相当旧的代码在2007年之前的Excel版本中运行得很好。在2007年,它会引发运行时错误:run-time error 16 : expression is too complex
。表达式非常简单,错误似乎与实际问题无关。
我正在尝试比较两个日期。
示例代码如下:
Function getContractEnd() As Date
getContractEnd = Range("ContractEndDate").Value
End Function
Sub Foo()
Dim currentDate As Date
Do
'stuff
Loop Until currentDate > getContractEnd 'run-time error 16
End Sub
当条件更改为:
时,Excel 2007可以正常工作Loop Until DateValue(currentDate) > DateValue(getContractEnd)
为什么Excel 2007基本上强迫我投射这些参数?两者都应该评估为Date数据类型?
我能想到的唯一可能的解释是,在Excel 2007中评估getContractEnd函数的返回值的方式发生了变化,但我找不到任何文档来支持它。
答案 0 :(得分:1)
我能够使用VBA 6.3在Excel 2003中重现您的问题 - 非常有趣!
这似乎是Loop构造特有的问题,它无法处理涉及两个“Date”类型的条件语句。
只要其中至少一个术语成为变体/日期,它就会开始起作用。我通过删除Sub Foo()... Dim statemant或Function getContractEnd()中的“As Date”证明了这一点。
有趣的是,无论Date还是Variant / Date
,debug.print VarType(...)总会返回7重写为循环时出现相同的错误
有趣的是(2)我无法在If-Statement中重现这种行为。即使是Do While和Do Until也能正常工作。
希望这有帮助
祝你好运 拾音