Ein Teilstring aus einem String-Set zu extrahieren ist nicht immer elegant zu lösen. Die Funktion fromSet() deckt genau das ab.
Die Funktion führt einen split() auf einen String aus. Aus dem Array wird der dem Index entsprechende Eintrag ausgegeben.
Sollte der Index Ausserhalb des Teilstringranges sein, so wird “” zurückgegeben
Siehe auch [VBA] findInSet().
? fromSet(2, "Hans,Peter,Marcel") Marcel ? fromSet(0, "13;CHF;234'00;#01-01-2015#", ";") 13 ? fromSet(2, "13;CHF;234'00;#01-01-2015#", ";") 234'00
Beispiel in einer Abfrage [code]=fromSet(0; “13;CHF;234'00;#01-01-2015#”; “;”)
Attribute VB_Name = "udf_fromSet" '------------------------------------------------------------------------------- 'File : udf_fromSet.bas ' Copyright mpl by ERB software ' All rights reserved ' http://wiki.yaslaw.info/dokuwiki/doku.php/vba/functions/fromset 'Environment : VBA 2007 + 'Version : 1.1.0 'Name : fromSet 'Author : Stefan Erb (ERS) ' 27.09.2019 - ERS - Dank einem Hinweis von knobbi38 iSet von String auf Variant gewechselt '------------------------------------------------------------------------------- Option Explicit '/** ' * Splittet ein Feld in Einzelteile und gibt dann den entsprechenden Wert zurck ' * Ist sehr gut geeignet um aus Queries zuzugreifen ' * ' * @example: "cdef" = fromSet(1, "ab,cdef,gh,j,klm") ' * ' * @param Int Index Wert der gewhlt werden soll. Index beginnt mit 0 ' * @param String Text Text der gesplittet werden soll ' * @param String delemiter Trennzeichen um den Text zu splitten ' * @return String Extrahiert Teil ' */ Public Function fromSet(ByVal iIndex As Long, ByVal iSet As Variant, Optional ByVal iDelemiter As String = ",") As String Dim items() As String: items = Split(NZ(iSet), iDelemiter) If (LBound(items) <= iIndex And iIndex <= UBound(items)) Then fromSet = items(iIndex) End Function