|
Sie kennen sicher die Stückelei, wenn Sie mehrzeilige Texte zusammensetzen möchten, etwa für ein Label oder als Nachricht einer MessageBox. Eine weit verbreitete Vorgehensweise ist etwa:
Dim Msg As String
Msg = "Hallo Welt!" & vbCrLf
Msg = Msg & "und" & vbCrLf
Msg = Msg & "Guten Morgen!"
MsgBox Msg
Wenn Sie von vornherein wissen, dass die einzelnen Teile mit jeweils einer Zeilentrennung (vbCrLf oder auch vbNewLine) dazwischen zusammengesetzt werden sollen, können Sie die Zeilen auch als Array anlegen und mittels der Join-Funktion zusammensetzen (Einschränkung: Diese Funktion steht erst ab Visual Basic 6 zur Verfügung):
Dim Msg(1 To 3) As String
Msg(1) = "Hallo Welt!"
Msg(2) = "und"
Msg(3) = "Guten Morgen!"
MsgBox Join(Msg, vbCrLf)
Falls Sie der Schreibaufwand stören sollte, für jedes zusammen zu setzendes Element eine eigene Zeile mit einer eigenen Zuweisung schreiben zu müssen, können Sie auch die Array-Funktion verwenden:
MsgBox Join(Array("A", "B", "C"), vbCrLf)
Falls die Einzelteile länger sein sollten, sparen Sie immerhin die Zuweisungen, wenn Sie um der Lesbarkeit willen nicht alles in eine einzige Zeile packen möchten (was hier ja ohne weiteres möglich wäre):
MsgBox Join(Array("Hallo Welt!", _
"und", _
"Guten Morgen!"), vbCrLf)
Möchten Sie auch noch die Array-Funktion einsparen, verwenden sie die folgende Hilfsfunktion ConcatStrSep. Im Gegensatz zu Join wird ihr der einzufügende Trenn-String im ersten Parameter übergeben, damit die einzelnen Elemente nachfolgend wie bei der Array-Funktion als ParamArray in beliebiger Menge aufgelistet übergeben werden können.
Public Function ConcatStr(Separator As String, _
ParamArray Parts() As Variant) As String
ConcatStr = Join(Parts, Separator)
End Function
Der Aufruf sähe beispielsweise so aus:
MsgBox ConcatStr(vbCrLf, "Hallo Welt!", "und", "Guten Morgen!")
Das Join-Prinzip können Sie übrigens auch einsetzen, wenn Sie eine Reihe von Strings auch ohne Trenn-String zusammenfügen möchten. Die übliche stufenweise Verkettung wie etwa
Dim Text As String
Text = "abc"
Text = Text & "def"
Text = Text & "ghi"
Text = Text & "jkl"
...
ist nämlich verhältnismäßig langsam, da jedes Mal der komplette String (Text) einmal im Speicher umkopiert werden muss. Je länger er wird, um so länger dauert zudem noch die Bearbeitung jeder Stufe.
Legen Sie hingegen die einzelnen Elemente als Array an, können Sie die Join-Funktion einsetzen:
Dim Texte(1 to 4) As String
Dim Text As String
Texte(1) = "abc"
Texte(2) = "def"
Texte(3) = "ghi"
Texte(4) = "jkl"
Text = Join(Texte)
|