2017-02-23 23 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

尖銳的眼睛澤夫...我掩飾了這一點。 –