2016-08-04 78 views
0

请你向我解释为什么下面的代码工作?将数组赋值给一个变量。 VBA代码不明确

Sub MyTest() 
Dim arrL1(3) As Variant 
Dim arrTemp(10) As Variant 
Dim i As Long, j As Long, s As String 
Dim varTemp As Variant 

For i = LBound(arrL1) To UBound(arrL1) 
    For j = LBound(arrTemp) To UBound(arrTemp) 
     arrTemp(j) = i + j 
    Next 

    **arrL1(i) = arrTemp** 
Next 
' 2nd part of the code 

**For i = LBound(arrL1) To UBound(arrL1)** 
    varTemp = arrL1(i) 
    s = "" 
    For j = LBound(varTemp) To UBound(varTemp)  
     s = s & Format(varTemp(j), "@@@") 
    Next 
    Debug.Print s 
Next 

End Sub 

什么使我困惑的是第一个“加星号”行arrL1(i) = arrTemp。当我尝试在我的项目中以这种方式分配数组时,我得到一个Object or Application defined error

另一个令人困惑的线是在第二部分,即varTemp = arrL1(i)。我们是否真的需要另一个变量varTemp?难道我们不能只用arrL1(i)

预先感谢您。

回答

1

关于你的第一个问题,你是否定义了Dim arrL1(3) As Variant,你是否像循环中那样设置它?

关于你的第二个问题,没有必要有varTemp = arrL1(i) ,你的代码没有它将工作(就像在下面的代码中一样)。

For i = LBound(arrL1) To UBound(arrL1) 
    s = "" 
    For j = LBound(arrL1(i)) To UBound(arrL1(i)) 
     s = s & Format(arrL1(i)(j), "@@@") 
    Next 

    Debug.Print s 
Next 
+0

@ Shai Rado:根据第一个问题,我已经声明“Dim b As Variant”,因为我事先不知道数组的大小。这可能是问题吗? – Lola

+0

@萝拉你用'b'而不是'arrL1(3)'? –

+0

@ Shai Rado:对不起,我应该更清楚了。上面的代码来自一本教科书。然而我努力在我自己的代码s.t中使用它。将一个数组(一个表n x k)分配给一个变体而不必将其重新设置,不会导致错误。 – Lola