VBA Tipp: Stringzusammensetzung wie in .NET

Aus DBWiki
Wechseln zu: Navigation, Suche

Anforderung

In .NET gibt es die Methode String.Format um einen String über Platzhalter zusammen zu setzen.

  • Ich möchte die gleiche Funktionalität auch in VBA nutzen.
  • Die Ersetzungsbegriffe, die anstelle der Platzhalter in den String eingesetzt werden sollen, können entweder einzeln durch Kommas getrennt, oder in einem Paket über ein Array eingegeben werden. Null-Werte oder die Eingabe von mehr als 1 Array lösen einen Fehler aus.

Lösung

Das geht mit folgender Funktion, die in einem globalen Modul gespeichert wird.

Public Function StringFormat(ByVal StringZuFormatieren As String, _
                             ParamArray Parameter() As Variant _
                             ) As String
 
 'Quelle: www.dbwiki.net oder www.dbwiki.de
 
 Dim Ergebnis        As String
 Dim i               As Long
 Dim arrParameter()  As Variant
 
 Ergebnis = StringZuFormatieren
 
 'Wenn mindestens 1 Parameter angegeben wurde
 If UBound(Parameter()) > -1 Then
 
   'Wenn Array als Parameter
   If IsArray(Parameter(0)) Then
     If UBound(Parameter) = 0 Then
       arrParameter = Parameter(0)
     End If
   Else
     arrParameter = Parameter
   End If
 
   For i = 0 To UBound(arrParameter)
     Ergebnis = Replace(Ergebnis, "{" & i & "}", CStr(arrParameter(i)))
   Next i
 
 End If
 
 StringFormat = Ergebnis
 
End Function

Aufruf

 'Beispiel 1: Übergabe von 2 Parametern: "sehr" und "einfacher"
 MsgBox StringFormat("Das ist ein {0} {1} Satz", "sehr", "einfacher")
 'ergibt: Das ist ein sehr einfacher Satz
 
 
 'Beispiel 2: Übergabe von 3 Parametern mittels des Arrays 'arr()'
 Dim arr() As Variant
 arr() = Array("noch", "sehr", "einfacher")
 MsgBox StringFormat("Das ist {0} ein {1} {2} Satz.", arr())
 'ergibt: Das ist noch ein sehr einfacher Satz
 
 
 'Beispiel 3: Übergabe von 2 Parametern als Rückgabewerte von Funktionen
 MsgBox StringFormat("Heute ist der {0} und es ist {1} Uhr.", Date, Format(Time(), "h:nn"))
Wiki hinweis.png Anmerkung: Funktioniert nicht zuverlässig, wenn in StringZuFormatieren oder in Parameter Akkoladen enthalten sind.


Web-Links