arrays - 尽管可以在 Debug.Print 中看到,但函数未正确返回数组
问题描述
我正在编写一个 Excel VBA 函数,该函数返回一个数组以在其他函数中使用。GenerateBlendedReturnSeries
当我在 Excel 工作表中测试该函数并用于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
解决方案
除非你这样做
ReDim BlendedReturnSeriesArray(1 To ArraySize, 1 To 1)
或者您正在使用Option Base 1
(绝不是一个好主意),您的返回数组的大小将设置为(0 到 ArraySize,0 到 1),因此您很可能只看到数组的第一个“列”(零索引)你的工作表。如果您扩展公式以涵盖两列,您将看到缺少的数字。
推荐阅读
- python - Use function globally or locally?
- wxpython - 如何让我的 wxPython 文本编辑器变暗?
- bootstrap-4 - What is the Bootstrap 4.0+ equivalent to ".hidden-size-down/up"
- sql - Display Serial No month wise according to number of data in table
- android - 找到了 React Native-Haste 包。但是找不到模块错误
- neo4j - Neo4j 如何在内存中缓存属性
- php - 我有 2 列从另一个表 A 中引用,我想显示用户名,因为它们保存在表 B 中
- java - HashMap 与 Hashset 中的插入
- java - 带有cardview的Imageview没有得到圆角
- avfoundation - 如何使用 AVFoundation 从视频流中获取原始格式的图像缓冲区?