2017-02-23 36 views
1

У меня есть ошибка 424 'объект требуется' в строке tableauScores(i - 1, j).Value = wsScores.Cells(2 + i * 3, j + 1).Value в следующем разделе.Объект, требуемый по варианту

Существует только этот юг, ничего больше. Я нахожусь в базе 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

[Вариант типа данных] (https: // MSDN. microsoft.com/en-us/library/office/gg251448.aspx) doen't не имеет свойства '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. Невозможно прочитать Value свойство Empty.

Рассмотрим делать это без Value:

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

Да, просто измените свой ответ, «Пусто» перед инициализацией –

+0

@ShaiRado Спасибо; исправлено. –

+0

Острый взгляд Зев ... Я заглянул прямо над этим. –

Смежные вопросы