Имеет способ, которым Excel оценивает тип даты, измененный в Excel 2007 - PullRequest
0 голосов
/ 09 октября 2009

У меня есть довольно старый код, который прекрасно работает в версиях Excel до 2007 года. В 2007 году он выдает ошибку времени выполнения: run-time error 16 : expression is too complex. Выражение довольно простое, и ошибка кажется не связанной с реальной проблемой.

Я пытаюсь сравнить 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 по сути заставляет меня приводить эти параметры? Оба должны оценивать типы данных Date?

Единственное возможное объяснение, которое я могу придумать, это то, что что-то изменилось в том, как возвращаемое значение из функции getContractEnd оценивается в Excel 2007, но я не могу найти какую-либо документацию, подтверждающую это.

1 Ответ

1 голос
/ 30 октября 2009

Мне удалось воспроизвести вашу проблему в Excel 2003 с VBA 6.3 - очень забавно!

Это, похоже, проблема, специфичная для конструкции Loop, которая не может обработать условный оператор, включающий два типа «Date».

Как только хотя бы одно из условий становится вариантом / датой, оно начинает работать. Я доказал это, удалив либо «As Date» в подсистеме состояний Sub Foo () ... Dim, либо в функции getContractEnd ().

Как ни странно, debug.print VarType (...) всегда будет возвращать 7 независимо от того, будет ли Date или Variant / Date

Та же ошибка возникает при перезаписи в цикл пока

Как ни странно (2) Я не смог воспроизвести это поведение в If-Statement. Даже Do Пока и Do Пока работает отлично.

Надеюсь, это поможет

Удачи MikeD

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...