2016-09-17 4 views
0

Ich spiele mit dem Aufruf eines sub(), aber bekomme immer den Fehler "Benutzerdefinierter Typ nicht definiert". Konnte nicht herausfinden, nachdem ich versucht habe, Variablen als Array zu deklarieren. Wäre dankbar jede Anleitung dazu:VBA: Übergabe von Variablen an sub() mit benutzerdefiniertem Typ

Public Type Whatever 
    ppp As String 
    qqq As Long 
    rrr As Single 
End Type 




Sub isthisworking() 
Dim thisis() As Whatever 
Dim i As Long 
Dim athing As Long 

For i = 0 To 5 
    With thisis(i) 
     .ppp = i & "p" 
     .qqq = i * 2 
     .rrr = i^3 
    End With 

athing = 20 

beingcalled thisis(), athing 

End Sub 



Public Sub beingcalled(ByRef thisis() As Whatever, athing As Long) 

Dim cycles As Long 

cycles = UBound(thisis) 

For i = 0 To cycles - 1 
    With thisis(i) 
     Debug.Print i & ": " & .ppp & "," & .qqq & "," & .rrr 
    End With 
Next 


End Sub 
+0

Sobald ich dimensionieren 'thisis' richtig, fügen Sie' Next' zu Ihre for-Schleife, und ändern Sie den Aufruf 'thisisis(), athing' zu 'thisis, athing' genannt wird, funktioniert es ohne Probleme. –

+0

Danke @Johncoleman. Ganz offensichtlich noch nicht auf der Dimensionierung. Oder schneiden und fügen Sie Fähigkeiten entweder! – user110084

+0

Wann müssen Sie tatsächlich die CALL-Anweisung verwenden? Und warum ist das so, dass bei Aufruffunktionen eine Funktion (var1, var2, ....) verwendet werden muss, aber für sub die Klammern weggelassen werden? Gibt es jemals einen Bedarf für sie? – user110084

Antwort

1

Ihre For i = 0 To 5 ist die Schließung Next i Anweisung fehlt.

Sie müssen die Größe Ihrer thisis() Array Redim:

ReDim thisis(o To 5) 

das ganze "isthisworking" Sub:

Sub isthisworking() 

Dim thisis() As Whatever 
Dim i As Long 
Dim athing As Long 

ReDim thisis(o To 5) 

For i = 0 To 5 
    With thisis(i) 
     .ppp = i & "p" 
     .qqq = i * 2 
     .rrr = i^3 
    End With 
Next i 

athing = 20 

beingcalled thisis(), athing  
' you can pass also thisis (without the brackets) gives the same result 

End Sub 
+0

Danke @Shairado. Ja, ich habe beim Kopieren und Einfügen die NEXT-Zeile irgendwie übersprungen. Ich hatte auch Probleme mit dem benutzerdefinierten Typ, der nicht erkannt wurde, bis ich das Modul löschte und ein neues einfügte. Ich wusste nicht, dass Sie ein Sub ohne() wie genannt (thesies(), athing) nennen könnte. Ich war ihm immer auch mit CALL vorausgegangen. Kann ich das gleiche Format mit Funktionen machen? – user110084

+0

@Shairodo, die Redim Var (o bis 5), macht das "o" es gleich konserviert? Nicht gesehen, dass dokumentiert – user110084

+0

Calling-Funktionen können unterschiedlich sein, vor allem, wenn die Funktion ein Argument zurückgibt, Redim Preserve ist eine andere Methode als Redim –

Verwandte Themen