VBA - Rückgabe-array von Property Get
Wenn arrays zurückgegeben werden, die durch Verweis, warum nicht die folgende arbeiten:
'Class1 class module
Private v() As Double
Public Property Get Vec() As Double()
Vec = v()
End Property
Private Sub Class_Initialize()
ReDim v(0 To 3)
End Sub
' end class module
Sub Test1()
Dim c As Class1
Set c = New Class1
Debug.Print c.Vec()(1) ' prints 0 as expected
c.Vec()(1) = 5.6
Debug.Print c.Vec()(1) ' still prints 0
End Sub
InformationsquelleAutor ThomasMcLeod | 2011-04-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
In VBA-arrays sind nie zurückgekehrt ist, durch Bezugnahme, es sei denn, Sie werden zurückgegeben, die durch eine
ByRef
parameter. Außerdem, wenn Sie verwenden=
zuweisen eines Arrays eine variable, die Sie gemacht haben, eine neue Kopie des Arrays, auch wenn Sie die Zuweisung an ein ByRef-argument innerhalb einer Prozedur sind, so sind Sie ziemlich viel Pech, versucht diese Arbeit zu machen.Einige alternativen sind...
Chip Person, eine Excel-consultant und MVP, sagt auf seiner Website, dass "Arrays werden immer by reference übergeben" cpearson.com/excel/byrefbyval.aspx Ist er Irre?
Seine Website ist sicherlich gut. Ich meinte eher "offiziellen" Quellen, obwohl - D. H. die Hilfe, die alten MS-Handbücher für VB usw. Es treibt mich in den Wahnsinn, dass grundlegende Sachen wie "Zuweisung mit
=
Kopien von arrays" ist Links für MVPs zu bieten, oder für Benutzer, zu entdecken, durch Experimente.Das Schlüsselwort in "Arrays werden immer by reference übergeben" wird "bestanden", das heißt, Sie "Parameter". Der Wert, der zurückgegeben wird, durch einen Prozeduraufruf kein parameter. Beim zuweisen eines Arrays zu einer Variablen, die mit
=
gibt es auch keine parameter übergeben wird.die VBA-Spezifikation bestätigt, dass arrays sind flach-kopiert auf Abtretung mit Ausnahme der Objekte und Klasseninstanzen innerhalb des array, siehe msdn.microsoft.com/en-us/library/ee157009(prot.20).aspx
InformationsquelleAutor Steve Jorgensen
Du nicht ein let-Eigenschaft. Auch die get-Eigenschaft ist wieder das gesamte array, anstatt nur das element in Frage. Ändern Sie den Rückgabetyp der Immobilie Erhalten Sie vom Double() , einfach nur Doppelklicken. Eigenschaft Hinzufügen Lassen. Beachten Sie, dass es nimmt zwei Eingänge, aber nur einer der an es übergeben wird. Die Letzte variable (MyValue, in diesem Fall) wird angenommen, dass zu erhalten es Wert ist, von was immer nach dem = - Zeichen. Legen Sie einen Haltepunkt irgendwo früh in Test1() und sehen, wie die Werte sind, die betroffen sind, im lokal-Fenster. Vergleichen Sie die Variablen erstellt, indem der ursprüngliche code im Gegensatz zu meinem code:
InformationsquelleAutor Clayton S