Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 子程序VBA中的ReDim_Excel_Vba - Fatal编程技术网

Excel 子程序VBA中的ReDim

Excel 子程序VBA中的ReDim,excel,vba,Excel,Vba,代码在ReDim行停止,表示缺少对象。为什么会这样?谢谢尝试将您的范围设置为范围对象,并声明它:(行中注释) 注意: 您可能需要转到VBA编辑器的设置,然后单击工具>选项>声明可变偏差>选中 这将确保您需要声明所有变量 如上所述,上述代码没有将Rng2声明为一个范围。因此,当Excel第一次看到名称Rng2时,它会创建一个变量类型变量,并将其设置为第一行中工作表的范围。Excel注意到,Sheets(“20资产模型”).Range(“b3:f48”)是一个单元格数组,它将变量Rng2视为一个数组

代码在ReDim行停止,表示缺少对象。为什么会这样?谢谢

尝试将您的范围设置为范围对象,并声明它:(行中注释)

注意:

您可能需要转到VBA编辑器的设置,然后单击工具>选项>声明可变偏差>选中

这将确保您需要声明所有变量

如上所述,上述代码没有将
Rng2
声明为一个范围。因此,当Excel第一次看到名称
Rng2
时,它会创建一个变量类型变量,并将其设置为第一行中工作表的范围。Excel注意到,
Sheets(“20资产模型”).Range(“b3:f48”)
是一个单元格数组,它将变量
Rng2
视为一个数组类型变量,用于代码的其余部分。假设您希望使用名为
Rng2
的变量作为范围,我们可以将其声明为范围,并使用
Set
命令分配它


当您不声明变量类型时,很容易发生这样的混淆。

尝试将您的范围设置为范围对象并声明它:(注释行)

注意:

您可能需要转到VBA编辑器的设置,然后单击工具>选项>声明可变偏差>选中

这将确保您需要声明所有变量

如上所述,上述代码没有将
Rng2
声明为一个范围。因此,当Excel第一次看到名称
Rng2
时,它会创建一个变量类型变量,并将其设置为第一行中工作表的范围。Excel注意到,
Sheets(“20资产模型”).Range(“b3:f48”)
是一个单元格数组,它将变量
Rng2
视为一个数组类型变量,用于代码的其余部分。假设您希望使用名为
Rng2
的变量作为范围,我们可以将其声明为范围,并使用
Set
命令分配它


当您不声明变量类型时,很容易发生这样的混淆。

Rng2=Sheets(“20资产模型”)。Range(“b3:f48”)
是一个数组,而不是一个范围。请尝试
Set Rng2=Sheets(“20资产模型”)。范围(“b3:f48”)
Rng2=Sheets(“20资产模型”)。范围(“b3:f48”)
是一个数组,而不是一个范围。尝试设置Rng2=Sheets(“20资产模型”).Range(“b3:f48”)
您可能需要转到VBA编辑器的设置,然后单击工具>选项>声明可变偏差>选中
您可能需要转到VBA编辑器的设置,然后单击工具>选项>声明可变偏差>选中
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
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