2016-12-29 15 views
0

Борьба с этой ошибкой - я не слишком хорошо знаком с объектно-ориентированным программированием, поэтому я могу просто испортить синтаксис или что-то в этом роде. Я упростил свой код вниз, чтобы показать только то, что, кажется, вызывает проблемы и связанные с ними переменные:Требуемый объект - VBA Excel

Type layer 
    Step As Variant 
End Type 

Sub PullData() 
    j = 6 

    Do While a <= j 
     steps(1, a) = Sheets("Sheet2").Range("B" & a) 
     a = a + 1 
    Loop 

    a = 1 
    For a = 1 To j 
     If steps(1, a) = 0 
     layer.Step = steps(1, a) 
     'From here there is a bunch of code where I use that value to copy a 
     'bunch of other values in the worksheet and paste into a different one, 
     'then move onto the next "item" in the array 
    Next a 
End Sub 

В основном то, что я пытаюсь сделать, это принять ряд данных из рабочего листа, преобразовать этот диапазон в одномерный массив, а затем установите layer.Step, равное каждому из этих значений через каждую итерацию. Ошибка во втором цикле происходит во layer.Step = steps(1, a).

+0

Вы не объявленную 'layer' в вашей подпрограмме. Если вы поместите 'Dim layer as layer' в начале подпрограммы' PullData', вы все равно получите ошибку? Я бы рекомендовал называть переменную чем-то другим, поэтому у вас есть «Dim myLayer как layer», а затем 'myLayer.Step = шаги (1, a)', чтобы помочь с путаницей. – OpiesDad

ответ

1

Ну, есть пара вещей, которые вы здесь делаете неправильно. Я собираюсь их перечислить:

  • Прежде всего, steps - это двумерный массив. Чтобы объявить одномерный массив, вам не нужна часть 1, вы просто объявляете это следующим образом: Dim steps(n) As variant
  • В вашем коде вы установили условие If, но вы его не закончили (возможно, это не так) в исходном коде).
  • Теперь о вашей ошибке: вы объявили пользовательский тип (layer), но вы никогда не создавали его. Вы не можете просто использовать имя типа. Вы можете создать переменную типа layer следующим образом: Dim myLayer as layer, а затем вам необходимо заменить layer.step = '.. на myLayer.step = '...

рабочий пример, который можно изменить в соответствии с вашими требованиями:

Type Layer 
    Step As Variant 
End Type 

Sub PullData() 
    Dim steps(7) As Variant 
    Dim j As Integer: j = 6 
    Dim a As Integer: a = 1 
    Do While a <= j ' it's better here to use `For` loop instead. 
     steps(a) = Sheet1.Range("B" & a) 
     a = a + 1 
    Loop 

    Dim myLayer As Layer 
    For a = 1 To j 
     myLayer.Step = steps(a) 
     ' Rest of your code 
    Next a 
End Sub 

Надежда, что помогает :)