【问题标题】:Passing Date Array to a UDF giving error 13将日期数组传递给 UDF,给出错误 13
【发布时间】:2013-08-14 05:28:20
【问题描述】:

我编写了一个子例程,并且在该子例程中使用以下代码没有任何错误。

仅相关代码:

Dim CandleEndTimes() as Date

NoOfCndlInDay = 5

ReDim Preserve CandleEndTimes(NoOfCndlInDay)

CandleEndTimes = Array(#10:30:00 AM#, #12:00:00 PM#, #1:30:00 PM#, #3:00:00 PM#, #3:30:00 PM#)

然后为了让这个子程序处理不止一种情况,我删除了为数组CandleEndTimes赋值的语句,并将其定义为参数,如下所示

Sub CustomCandles(UseOnBookName As String, UseOnSheetName As String, NoOfCndlInDay As Integer, CandleEndTimes() As Date)

用于调用上述子程序的子程序代码:

Sub callingcust()

Dim Min90CandleEndTimes() As Date

ReDim Preserve Min90CandleEndTimes(5)

Min90CandleEndTimes = Array(#10:30:00 AM#, #12:00:00 PM#, #1:30:00 PM#, #3:00:00 PM#, #3:30:00 PM#)


End Sub

在用于分配值的语句中调试代码时出现错误 13

任何人都可以看到上面的代码有什么问题吗?如果您觉得信息不足,请告诉我还有什么需要分享的。

请帮忙!

【问题讨论】:

    标签: excel parameter-passing argument-passing vba


    【解决方案1】:

    Array 函数返回一个 Variant 类型,这就是您得到类型不匹配错误的原因 - 如果目标数组是动态的并且 与来源相同的类型。你需要 5 个离散任务

    Dim Min90CandleEndTimes() As Date
    
    ReDim Preserve Min90CandleEndTimes(5)
    
    Min90CandleEndTimes(1) = #10:30:00 AM#
    Min90CandleEndTimes(2) = #12:00:00 PM#
    Min90CandleEndTimes(3) = #1:30:00 PM#
    Min90CandleEndTimes(4) = #3:00:00 PM#
    Min90CandleEndTimes(5) = #3:30:00 PM#
    

    顺便说一句,除非您设置了 Option Base 1,否则您的数组有 6 个元素;-)

    【讨论】:

    • 非常感谢乔伊丝!我知道我迟到了一百万年!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-28
    • 1970-01-01
    • 1970-01-01
    • 2011-04-12
    • 1970-01-01
    • 1970-01-01
    • 2015-03-10
    相关资源
    最近更新 更多