2017-02-23 17 views
1

我在下面的子行中有线tableauScores(i - 1, j).Value = wsScores.Cells(2 + i * 3, j + 1).Value上的错误424'所需对象'。变体上所需的对象

只有这个子,没有别的。我在基地0.

Dim wsScores As Worksheet 
    Dim i As Integer, j As Integer 
    Dim tableauScores As Variant 

    Set wsScores = ThisWorkbook.Worksheets("Scores")   
    j = 0 

    ReDim tableauScores(1, 2) 

    If wsScores.Cells(2, 1).Value = "Thomas" Then   
     For i = 1 To 2 
      For j = 1 To 3 
       tableauScores(i - 1, j).Value = wsScores.Cells(2 + i * 3, j + 1).Value 
      Next j 
     Next i    
    End If 

End Sub 

我不明白为什么,我总是使用这样的变体。

+0

你可以使用'使用ReDim tableauScores(1〜2个,1〜3)',使您更容易计算 –

+0

[Variant数据类型(https://开头MSDN。 microsoft.com/en-us/library/office/gg251448.aspx)本身没有属性“Value”。要将值分配给'Variant',您只需将其分配给变量本身。 – dee

+0

@dee主要观点不是'Variant'没有'Value'属性。下面的代码将起作用:'Dim v As Variant:Set v = ActiveWorksheet.Cells(1,1):Debug.Print v.Value';即使变量'v'的类型是'Variant',它所引用的对象也具有'Value'属性,并且VBA将在运行时解析该属性。 –

回答

5

tableuScores被定义为VariantVariant() —和直到一个给定的数组元素被初始化一个数组,则其Empty的值。无法阅读EmptyValue财产。

考虑不Value这样做:

tableauScores(i - 1, j) = wsScores.Cells(2 + i * 3, j + 1).Value 
+0

是的,只是修改你的答案,它在初始化之前是空的 –

+0

@ShaiRado谢谢;固定。 –

+0

尖锐的眼睛泽夫...我掩饰了这一点。 –