Функция неправильно возвращает массив, хотя может видеть в Debug.Print - PullRequest
0 голосов
/ 19 октября 2018

Я пишу функцию Excel VBA, которая возвращает массив для использования в других функциях.Когда я проверяю функцию GenerateBlendedReturnSeries в моем листе Excel и использую ctlr-shift-enter, чтобы увидеть полный результат, весь массив - все нули.Странно, однако, когда я проверяю Debug.Print (BlendedReturnSeriesArray(300, 1)), возвращается правильное ненулевое значение.Почему функция не может правильно вернуть этот результат?Возвращаемый массив имеет размер 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

1 Ответ

0 голосов
/ 19 октября 2018

Если вы не сделаете это

ReDim BlendedReturnSeriesArray(1 To ArraySize, 1 To 1)

или не используете Option Base 1 (никогда не бывает хорошей идеей), ваш возвращаемый массив будет иметь размер (от 0 до ArraySize, от 0 до 1), поэтомувы видите только первый «столбец» массива (нулевой индекс) на рабочем листе.Если развернуть формулу до двух столбцов, вы увидите пропущенные числа.

...