【发布时间】: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来自使用AccountID的Index,Match获得的范围的Rows.Count。Account1PeriodReturnSeriesArray是维度ArraySizex 1 的Variant,来自Account1PeriodReturnsSeries范围,您可以使用AccountID从Index,Match获得。我省略了这段代码,因为正如Debug.Print所示,最终数组按预期工作,除非我尝试返回它。
标签: arrays excel vba excel-formula