Sub testCov()
Rng2 = Sheets("20 Asset Model").Range("b3:f48")
Dim covMatrix() As Variant
ReDim covMatrix(1 To Rng2.Columns.Count, 1 To Rng2.Columns.Count)
Call constructCovMatrix(Rng2, covMatrix)
MsgBox (covMatrix)
End Sub
Sub constructCovMatrix(rng, ByRef covMatrix)
'@rng The Range of the return series.
Dim i As Integer
Dim j As Integer
For i = 1 To rng.Columns.Count
For j = 1 To rng.Columns.Count
covMatrix(i, j) = Application.WorksheetFunction.Covar(rng.Columns(i), rng.Columns(j))
Next
Next
End Sub
Run Code Online (Sandbox Code Playgroud)
代码停在 ReDim 行,表示对象丢失。为什么是这样?谢谢
尝试将您的范围设置为声明它的范围对象:(内联注释)
Sub testCov()
Dim Rng2 As Range '- Declare variable
Set Rng2 = Sheets("20 Asset Model").Range("b3:f48") '-Set range
Dim covMatrix() As Variant
ReDim covMatrix(1 To Rng2.Columns.Count, 1 To Rng2.Columns.Count)
Call constructCovMatrix(Rng2, covMatrix)
MsgBox (covMatrix)
Set Rng2 = Nothing '- Cleanup anytime 'Set' is used
End Sub
Run Code Online (Sandbox Code Playgroud)
笔记:
您可能需要转到 VBA 编辑器的设置并单击“工具”>“选项”>“声明变量减速”>“选中”
这将确保您需要声明所有变量。
事实上,上面的代码没有声明Rng2
为范围。因此,当 Excel 第一次看到该名称时,Rng2
它会创建一个 Variant 类型变量,并将其设置为等于第一行中工作表的范围。Excel 注意到这Sheets("20 Asset Model").Range("b3:f48")
是一个单元格数组,并将该变体视为Rng2
数组类型变量,以用于代码的其余部分。假设您要使用命名Rng2
为范围的变量,我们可以这样声明它并使用Set
命令对其进行赋值。
当您不声明变量类型时,很容易发生这样的混淆。
归档时间: |
|
查看次数: |
983 次 |
最近记录: |