excel的方式是否评估Excel 2007中更改的日期类型

时间:2009-10-09 17:45:39

标签: excel-vba excel-2007 types vba excel

我有一些相当旧的代码在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函数的返回值的方式发生了变化,但我找不到任何文档来支持它。

1 个答案:

答案 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也能正常工作。

希望这有帮助

祝你好运 拾音