【问题标题】:Function Not Properly Returning Array Though Can See in Debug.Print虽然可以在 Debug.Print 中看到,但函数没有正确返回数组
【发布时间】:2019-03-23 20:36:19
【问题描述】:

我正在编写一个 Excel VBA 函数,它返回一个数组以在其他函数中使用。当我在 Excel 工作表中测试函数 GenerateBlendedReturnSeries 并使用 ctlr-shift-enter 查看完整结果时,整个数组全为零。然而奇怪的是,当我检查Debug.Print (BlendedReturnSeriesArray(300, 1)) 时,会返回正确的非零值。为什么函数无法正确返回此结果?返回的 I 数组是 329 x 1,当 for loop 中的乘法/加法返回错误时,它包含行中的 "" 值。

Function GenerateBlendedReturnSeries(AccountID1 As String, Account1Proportion As Double, _
     Optional ByVal AccountID2 As String, Optional ByVal Account2Proportion As Double, _
     Optional ByVal AccountID3 As String, Optional ByVal Account3Proportion As Double) As Variant 'Vs. As Double()

' CODE IN BETWEEN

Dim BlendedReturnSeriesArray As Variant
    ReDim BlendedReturnSeriesArray(ArraySize, 1)

    Debug.Print (ArraySize)

    On Error Resume Next
    For i = 0 To UBound(BlendedReturnSeriesArray)

        BlendedReturnSeriesArray(i, 1) = _
          Account1PeriodReturnSeriesArray(i, 1) * Account1Proportion _
        + Account2PeriodReturnSeriesArray(i, 1) * Account2Proportion _
        + Account3PeriodReturnSeriesArray(i, 1) * Account3Proportion
        'Debug.Print (BlendedReturnSeriesArray(i, 1))
        'Debug.Print (i)

    Next i

    On Error GoTo 0

    Debug.Print (BlendedReturnSeriesArray(300, 1))

    GenerateBlendedReturnSeries = BlendedReturnSeriesArray 'BlendedReturnSeriesArray

End Function

【问题讨论】:

  • ArraySize 来自哪里?还是Account1PeriodReturnSeriesArray 等?
  • ArraySize 来自使用AccountIDIndex,Match 获得的范围的Rows.CountAccount1PeriodReturnSeriesArray 是维度 ArraySize x 1 的 Variant,来自 Account1PeriodReturnsSeries 范围,您可以使用 AccountIDIndex,Match 获得。我省略了这段代码,因为正如Debug.Print 所示,最终数组按预期工作,除非我尝试返回它。

标签: arrays excel vba excel-formula


【解决方案1】:

除非你这样做

ReDim BlendedReturnSeriesArray(1 To ArraySize, 1 To 1)

或者您正在使用Option Base 1(这绝不是一个好主意),您的返回数组的大小将是(0 到 ArraySize,0 到 1),因此您很可能只看到数组的第一个“列” (零索引)在您的工作表上。如果将公式扩展为涵盖两列,您将看到缺少的数字。

【讨论】:

    猜你喜欢
    • 2019-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-21
    • 2016-10-24
    • 1970-01-01
    相关资源
    最近更新 更多