【问题标题】:Dates in dd/mm/yyyy format return 1004 Error in Excel Vbadd/mm/yyyy 格式的日期在 Excel Vba 中返回 1004 错误
【发布时间】:2019-03-30 10:18:06
【问题描述】:

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

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 理解日期,同时在我的计算机中保留欧洲格式吗?

谢谢

【问题讨论】:

  • 奇怪...您提供的代码对我有用 (Excel 2016, v.16.0.1.., 64-bit) 。以下三个不同的版本对我有用:1.dates(1) = #1/15/2015# 2.dates(1) = DateSerial(2015, 1, 15) 3.dates(1) = CDate("2015-01-15")

标签: excel vba date xirr


【解决方案1】:

问题不在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中返回4201942384

【讨论】:

  • 我喜欢将日期转换为整数的想法,但我面临着让 VBA 理解日期的同样问题。我如何从“15/01/2015”到“42019”?我已经尝试过了,但不起作用:dates(1) = CLng("1/15/2015")
  • @David R - 至少您正在缩小问题范围,从图片中消除 XIRR() 。你能试试 CLng("01/15/2015").设置看起来很奇怪。
  • 我通过 1) 将日期引入为 Long 而不是 Dates 来解决它。 2)从excel(通过Range.Value)获取日期,而不是在代码中输入日期
  • @DavidR - 恭喜! :) 您甚至可以考虑将日期设为Range.Value2 并立即将它们解析为Date()。在一般情况下,它应该工作。 Long 只是一个建议的解决方法,以找出真正的问题。
猜你喜欢
  • 2016-01-11
  • 2014-09-28
  • 2016-11-06
  • 1970-01-01
  • 2016-01-02
  • 1970-01-01
  • 2022-11-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多