Даты в формате дд / мм / гггг возвращают 1004 Ошибка в Excel Vba

У меня есть этот код, и он работает:

Sub try3()
Dim dates(1 To 2) As Date
Dim values(1 To 2) As Double
Dim TIR As Double

dates(1) = #1/1/2015#
dates(2) = #1/1/2016#

values(1) = -1000
values(2) = 1101

TIR = Application.WorksheetFunction.xirr(values, dates)

End Sub

Однако, если я изменю даты, например, на

dates(1) = #1/15/2015#
dates(2) = #1/15/2016#

то я получаю ошибку 1004:

Msgstr "Не удалось получить свойство Xirr класса WorksheetFuntion".

Формат даты моего компьютера европейский (дд / мм / гггг). Если я изменю его на американский (мм / дд / гггг), то мой код работает.

Я хотел бы сохранить европейский формат в моей системе, и я хотел бы, чтобы мой код мог запускаться с любого компьютера, независимо от формата даты их системы

Я попытался определить даты следующим образом, но я получаю ту же ошибку.

dates(1) = DateSerial(2015, 1, 15)
dates(2) = DateSerial(2016, 1, 15)

Любая идея, как заставить VBA понимать даты, сохраняя европейский формат на моем компьютере?

Спасибо

1 ответ

Решение

Проблема не в XIRR(), он делает все возможное:

Sub TestMe()

    Dim TIR As Double
    TIR = Application.WorksheetFunction.Xirr(Array(-1000, 1101), Array(42019, 42384))
    Debug.Print TIR

End Sub

Просто попробуйте бросить на Long с CLngнезависимо от того, с какой датой вы работаете, она должна вернуться 42019 а также 42384 в Excel, если вы не используете Date1904 "особенность".

Другие вопросы по тегам