version=1.1.1
vdate=09.10.2015
fname=udf_list.bas
ns=%NAMESPACE%
fpath=/vba/functions
{{keywords>vba,list,array}}
{{description>Diese Funktionen schreiben die Werte einer Auflistung in Variablen. Fast so wie list() in PHP. V-%%version
%%}}
====== [VBA] list() ======
//Diese Funktion schreibt die Werte einer Auflistung in Variablen. Fast so wie list() in PHP.
list() ist geeignet um ein Array, Collection etc. in Variablen zu zerteilen.
//==Version %%version%% %%vdate%%==
{{%%fname%%|Download %%fname%% (V-%%version%%)}}
Dieselbe Technik verende ich auch bei der Klasse [[:vba:classes:iterator:]].
\\ Iterator->list() und Iterator->listNext()
===== Definition =====
==== list() ====
Public Function list( _
ByRef iList, _
ParamArray oParams() As Variant _
) As Boolean
=== Parameterliste ===
***iList** Die Liste. Dies kann ein Array, Dictionary, Collection, %%Regexp.MatchCollection, Regexp.Match%% oder DAO.Recordset sein
***oParams** Die Variablen, die überschrieben werden
=== Return ===
list() gibt ein Boolean zurück.Je nachdem, ob die iList abgearbeitet werde kann oder nicht
===== Anwendungsbeispiele =====
> Für die Ausgabe der Resultate verwendete ich die Funktion [[:vba:functions:print_r:]].
==== Beispiele zu list() ====
=== Ein einfacher Array ===
Der Array kann mit Index 0 beginnen oder auch einen anderen LBound haben. Indiesem Beispiel get der Index von 1 bis 4
Public Sub testList()
Dim myArray(1 To 4) As Variant
Dim retA As Integer, retB As String, retC As Variant
'Array abfüllen. Es ist egal, ob der Array einen lbound() von 0 oder etwas anderem hat
myArray(1) = 1
myArray(2) = "B"
myArray(3) = Null
myArray(4) = "iv"
'Weniger Variablen übergeben als Werte im Array sind
list myArray, retA, retB, retC
'Variabeln begutachten
print_rm retA, retB, retC
End Sub 1
B
=== Eine Collection/Dictionary ===
Collection und Dictionary funktionieren gleich. Bei beiden werden die Keys verworfen
Public Sub testList()
Dim myCol As New Collection
Dim retA As Integer, retB As String, retC As Variant
'Array abfüllen
myCol.add 1
myCol.add "B"
myCol.add Null
myCol.add "iv"
list myCol, retA, retB, retC
'Variabeln begutachten
print_rm retA, retB, retC
End Sub 1
B
=== MatchCollection und Match ===
In diesem Beispiel verwende ich die meine eigenen [[:vba:functions:rx:|RegExp Funktionen]], Geht aber mit der Standartanwednung von %%RegExp%%
Public Sub testList()
Dim mc As MatchCollection
Dim von As Variant, nach As Variant, x As Variant, y As Variant
Dim i As Long
Set mc = rx_match("([A-H])([1-8])", "Springer von A1 auf B3")
Debug.Print "//Auswertung MatchCollection:"
list mc, von, nach
print_rm von, nach
Debug.Print "//Auswertung Matches:"
For i = 0 To mc.count - 1
Debug.Print "//Index " & i
list mc(i), x, y
print_rm x, y
Next i
End Sub//Auswertung MatchCollection:
A1
B3
//Auswertung Matches:
//Index 0
A
1
//Index 1
B
3
=== Beispiel eines Loops über ein Recordset mit list() ===
In diesem Beispiel arbeite ich mit dem Rückgabewert um ein Recordset abzuarbeiten
Public Sub testList()
Dim rs As DAO.Recordset
Dim id As Integer, nr1 As Long, nr2 As Long
Set rs = CurrentDb.OpenRecordset("SELECT id, number_one, number_two FROM [_test]")
Do While list(rs, id, nr1, nr2)
Debug.Print id & ": " & nr1 & " + " & nr2 & " = " & nr1 + nr2
rs.MoveNext 'Nicht vergessen. list() macht keinen Vorschub!
Loop
End Sub1: 3 + 5 = 8
2: 4 + 8 = 12
3: 5 + 2 = 7
4: 7 + 5 = 12
===== Code =====