Excel Vba中dd/mm/yyyy格式的日期返回1004错误

Excel Vba中dd/mm/yyyy格式的日期返回1004错误,excel,vba,date,xirr,Excel,Vba,Date,Xirr,我有这个代码,它可以工作: 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 但是,如

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

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:

“无法获取类WorksheetFunction的属性Xirr”

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

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

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

dates(1) = DateSerial(2015, 1, 15)
dates(2) = DateSerial(2016, 1, 15)
你知道如何让VBA理解日期,同时在我的电脑中保留欧洲格式吗


谢谢

问题不在
XIRR()
中,它正在尽最大努力:

Sub TestMe()

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

End Sub

只要试着用
CLng
转换到
Long
,无论您使用哪个日期,如果您没有使用
Date1904
功能,它都应该在Excel中返回
42019
42384

奇怪。。。您提供的代码适用于我(Excel 2016,v.16.0.1..,64位)。以下三个不同的版本对我来说很有用:1<代码>日期(1)=#2015年1月15日#2<代码>日期(1)=日期序列(2015,1,15)3<代码>日期(1)=CDate(“2015-01-15”)我喜欢将日期转换为整数的想法,但我面临着让VBA理解日期的同样问题。如何从“2015年1月15日”过渡到“42019”?我已经试过了,但不起作用:dates(1)=CLng(“1/15/2015”)@David R-至少你缩小了问题的范围,从图片中删除了XIRR()。你能试试CLng(2015年1月15日)吗。设置似乎很奇怪。我解决了这个问题:1)将日期改为长日期。2) 从excel中获取日期(通过Range.Value),而不是在code@DavidR-祝贺你!:)您甚至可以考虑将日期作为<代码> Real.Value2< /代码>,并立即将它们解析为<代码>数据()/<代码>。在一般情况下,它应该起作用。
Long
只是一个建议的解决方法,可以看到问题的真正所在。