2009-10-09 43 views
0

我有一些相當老的代碼在2007年以前的Excel版本中運行得很好。2007年,它引發運行時錯誤:run-time error 16 : expression is too complex。表達很簡單,錯誤似乎與實際問題無關。有沒有方法評估在Excel 2007中更改日期類型

我在比較2個日期。

示例代碼如下:

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中基本上是逼我投這些參數?兩者都應該評估爲日期數據類型?

我可以想象的唯一可能的解釋是,在Excel 2007中評估getContractEnd函數的返回值的方式發生了一些變化,但我找不到任何支持該文檔的文檔。

回答

1

我能夠在Excel 2003中使用VBA 6.3重現您的問題 - 非常有趣!

這似乎是Loop構造特有的問題,它無法處理涉及兩個「Date」類型的條件語句。

只要至少有一個術語變成變體/日期,它就開始工作。我通過刪除Sub Foo()中的「As Date」... Dim statemand或Function getContractEnd()來證明這一點。

有趣的是一個debug.print VarType函數(...)總是會返回7不管日期或變體/日期

重寫循環,當

有趣的是,當發生同樣的錯誤(2)我無法在If語句中重現此行爲。即使一直做,直到工作正常。

希望這有助於

好運 拾音

+0

爲我工作。我很高興看到一些文檔解釋了爲什麼會出現這種行爲,但我可以通過修改返回類型並更改爲while循環來更改Excel 2007中的行爲。仍然無法在Excel 2003上打破這一點,但我會接受它更多的是關於Loop的問題,而不是關於從2003年到2007年的問題。謝謝。 – DaveParillo 2009-11-02 17:47:00

相關問題