2

我有这段代码,它可以工作:

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:

“无法获得类 WorksheetFuntion 的属性 Xirr”。

我的计算机日期格式是欧洲(dd/mm/yyyy)。如果我将其更改为美国(mm/dd/yyyy),那么我的代码就可以工作。

我想在我的系统中保留欧洲格式,并且我希望我的代码可以在任何计算机上运行,​​无论其系统的日期格式如何

我试图按如下方式定义日期,但我得到了同样的错误。

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

知道如何在我的计算机中保留欧洲格式的同时让 VBA 理解日期吗?

谢谢

4

1 回答 1

0

问题不在于XIRR(),它正在尽力而为:

Sub TestMe()

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

End Sub

只需尝试转换为Longwith CLng,无论您使用哪个日期,它都应该返回4201942384在 Excel 中,如果您不使用Date1904“功能”。

于 2018-10-25T18:33:02.320 回答