代码之家  ›  专栏  ›  技术社区  ›  DaveParillo

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

  •  0
  • DaveParillo  · 技术社区  · 16 年前

    我有一些相当旧的代码,在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
    

    当条件更改为:

    Loop Until DateValue(currentDate) > DateValue(getContractEnd)
    

    我能想到的唯一可能的解释是,在Excel 2007中计算getContractEnd函数返回值的方式发生了变化,但我找不到任何文档来支持这一点。

    1 回复  |  直到 8 年前
        1
  •  1
  •   MikeD    16 年前

    我能够用VBA 6.3在Excel 2003中重现你的问题——非常有趣!

    这似乎是Loop构造特有的问题,它无法处理涉及两个“Date”类型的条件语句。

    只要至少有一个术语成为变量/日期,它就开始工作。我通过删除Sub-Foo()中的“As Date”来证明这一点。..Dim语句或函数getContractEnd()中。

    有趣的是,debug.print VarType(…)将始终返回7,无论是Date还是Variant/Date

    重写到Loop While时也会发生同样的错误

    有趣的是(2)我无法在If语句中重现这种行为。即使是Do While和Do Until也很有效。

    希望这有帮助

    祝你好运 麦克德

    推荐文章