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. Die gleiche Funktionalität möchte ich auch in VBA nutzen.

Lösung

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

Argumente der Funktion:

  • StringZuFormatieren: Zeichenkette, innerhalb der die Platzhalter durch entsprechende Begriffe ersetzt werden sollen.
  • Parameter(): 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 einem Array lösen einen Fehler aus.
Public Function StringFormat(ByVal StringZuFormatieren As String, _
                             ParamArray Parameter() As Variant _
                             ) As String
 
   ' Quelle: http://www.dbwiki.net/
 
 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.


Weblinks