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 Sub 1: 3 + 5 = 8 2: 4 + 8 = 12 3: 5 + 2 = 7 4: 7 + 5 = 12 ===== Code =====