2016-12-29 3 views
0

Mit diesem Fehler zu kämpfen - ich bin nicht zu vertraut mit objektorientierten Programmierung, so dass ich nur die Syntax oder etwas vermasselt. Ich habe meinen Code vereinfacht unten nur zu zeigen, was das Problem zu sein scheint verursacht und die damit verbundenen Variablen:Objekt erforderlich - 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 

Im Grunde, was ich versuche, aus einem Arbeitsblatt eine Reihe von Daten zu tun nehmen ist, konvertieren diesen Bereich in ein eindimensionales Array und setzen Sie dann layer.Step gleich jeden dieser Werte durch jede Iteration. Der Fehler tritt bei layer.Step = steps(1, a) in der zweiten Schleife auf.

+0

Sie haben nicht erklärt 'LAYER' in Ihrem Unterprogramm. Wenn Sie am Anfang der 'PullData' -Unterroutine 'Dim-Layer als Layer' setzen, erhalten Sie trotzdem den Fehler? Ich würde empfehlen, die Variable etwas anderes zu benennen, also haben Sie 'Dim myLayer als Schicht 'und dann' myLayer.Step = steps (1, a) ', um mit der Verwirrung zu helfen. – OpiesDad

Antwort

1

Nun, es gibt ein paar Dinge, die Sie hier falsch machen. Ich werde sie auflisten:

  • Zunächst ist steps ein zweidimensionales Array. Um ein eindimensionales Array zu deklarieren, Sie brauchen nicht die 1 Teil, erklären Sie es einfach so: Dim steps(n) As variant
  • in Ihrem Code Sie begann eine If Zustand, aber du hast es nicht zu Ende (vielleicht ist es nicht der Fall im ursprünglichen Code).
  • Nun zu Ihrem Fehler: Sie haben einen benutzerdefinierten Typ (layer) deklariert, aber Sie haben nie eine Variable davon erstellt. Sie können nicht nur den Typnamen verwenden. Sie können eine Variable vom Typ layer wie folgt erstellen: Dim myLayer as layer, und dann müssen Sie layer.step = '.. durch myLayer.step = '.. ersetzen.

Ein Arbeitsbeispiel, dass Sie Ihre Anforderungen anpassen können anpassen:

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 

Hoffnung, das hilft :)

Verwandte Themen