2017-12-07 1 views
0

Ich kann nicht herausfinden, wie auf Objekteigenschaften in einem Array mithilfe von VBA zugegriffen wird. Ich habe ein Array erstellt wie:Zugreifen auf Objekteigenschaften in Array VBA

Dim objectArray(10) as Variant  
Dim counter as Integer   'used to move to next element in array 

Als nächstes erklärte ich ein Objekt und speichert sie im Array:

Dim object as Variant 
objectArray(0) = object   'object stored in array[0] 
counter = counter + 1    'increment counter 

ich das Array an eine Funktion übergeben werden soll.

Call function(objectArray()) 

Diese Funktion empfängt das Array von Objekten wie:

Public function(objectArray() as Variant) 

Bisher scheint es funktioniert zu haben, wenn ich es gedebuggt haben. Mein ObjektArray() scheint das Objekt zu enthalten. Wenn ich ein Objekt in dem Array gespeichert werden, zeigt das debuger

objectArray(0)(1,1) .... 'this is in the Watch section of the debugger 

I die Eigenschaften des Objekts in der ersten Position des Arrays zugreifen möchten. Dieses Objekt enthält einen Namen, mehrere Werte und ein Datum. Ich habe versucht, die Eigenschaften für das Objekt zuzugreifen, wie

Dim separateVar as Variant    'declare new var to hold "name" 

separateVar = objectArray(0)(1,1).Value 

Allerdings, wenn ich das Makro auszuführen, erhalte ich „einige Fehler aufgetreten, 13, Type Mismatch“. Greife ich auf die Objekteigenschaftswerte falsch zu?

Jede Hilfe wäre willkommen. Das Auffinden von Artikeln über den Zugriff auf Objekte ist einfach, aber es war sehr schwierig, einen Zugriff auf ihre individuellen Eigenschaften zu finden.

+0

'objectArray (0) .Value' – ACatInLove

+0

In Ihrer Objektzuordnung fehlt' Set'. Sprechen Sie wirklich über Objekte hier oder Arrays? –

Antwort

0

Versuchen Sie dies.

Sub T() 
    Dim objInner1(1) As String 
     objInner1(0) = "Hello" 
     objInner1(1) = "World 1" 

    Dim objInner2(1) As String 
     objInner2(0) = "Hello" 
     objInner2(1) = "World 2" 

    Dim objInner3(1) As String 
     objInner3(0) = "Hello" 
     objInner3(1) = "World 3" 

    Dim objOuter(2) As Variant 
     objOuter(0) = objInner1 
     objOuter(1) = objInner2 
     objOuter(2) = objInner3 

    PrintArray objOuter 
End Sub 

Sub PrintArray(objArray As Variant) 
    Dim idx As Long 
    For idx = LBound(objArray) To UBound(objArray) 
     Debug.Print objArray(idx)(0) & " " & objArray(idx)(1) 
    Next idx 
End Sub 

'Hello World 1 
'Hello World 2 
'Hello World 3 
+0

@ Kostak K. Vielen Dank für diese Lösung. Es ist ein einfacherer Weg als das, was ich tat und es funktioniert. –

Verwandte Themen