VBA
String Literals - Escape-Zeichen, nicht druckbare Zeichen und Zeilenfortsetzungen
Suche…
Bemerkungen
Die Zuweisung von String-Literalen in VBA ist durch die Einschränkungen der IDE und die Codepage der Spracheinstellungen des aktuellen Benutzers eingeschränkt. Die obigen Beispiele zeigen die Sonderfälle von Escape-Strings, speziellen, nicht druckbaren Strings und langen String-Literalen.
Wenn Sie Zeichenfolgenliterale zuweisen, die bestimmte Zeichen für eine bestimmte Codepage enthalten, müssen Sie möglicherweise Bedenken hinsichtlich der Internationalisierung berücksichtigen, indem Sie eine Zeichenfolge aus einer separaten Unicode-Ressourcendatei zuweisen.
Dem Charakter "entkommen"
VBA - Syntax erfordert , dass ein String-Literal erscheinen innerhalb von "
Marken, so dass , wenn die Zeichenfolge muss in Anführungszeichen enthalten, werden Sie entkommen müssen / prepend die "
Zeichen mit einem zusätzlichen "
so dass VBA versteht , dass Sie die Absicht , ""
zu sein als "
String "
interpretiert.
'The following 2 lines produce the same output
Debug.Print "The man said, ""Never use air-quotes"""
Debug.Print "The man said, " & """" & "Never use air-quotes" & """"
'Output:
'The man said, "Never use air-quotes"
'The man said, "Never use air-quotes"
Lange String-Literale zuweisen
Der VBA-Editor lässt nur 1023 Zeichen pro Zeile zu, normalerweise sind jedoch nur die ersten 100-150 Zeichen ohne Bildlauf sichtbar. Wenn Sie lange Zeichenfolgenliterale zuweisen müssen, aber den Code lesbar halten möchten, müssen Sie für die Zuweisung der Zeichenfolge Zeilenfortsetzungen und Verkettungen verwenden.
Debug.Print "Lorem ipsum dolor sit amet, consectetur adipiscing elit. " & _
"Integer hendrerit maximus arcu, ut elementum odio varius " & _
"nec. Integer ipsum enim, iaculis et egestas ac, condiment" & _
"um ut tellus."
'Output:
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer hendrerit maximus arcu, ut elementum odio varius nec. Integer ipsum enim, iaculis et egestas ac, condimentum ut tellus.
Mit VBA können Sie eine begrenzte Anzahl von Zeilenfortsätzen verwenden (die tatsächliche Anzahl hängt von der Länge jeder Zeile im Continuous-Block ab). Wenn Sie also sehr lange Zeichenfolgen haben, müssen Sie die Verkettung zuweisen und erneut zuweisen .
Dim loremIpsum As String
'Assign the first part of the string
loremIpsum = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. " & _
"Integer hendrerit maximus arcu, ut elementum odio varius "
'Re-assign with the previous value AND the next section of the string
loremIpsum = loremIpsum & _
"nec. Integer ipsum enim, iaculis et egestas ac, condiment" & _
"um ut tellus."
Debug.Print loremIpsum
'Output:
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer hendrerit maximus arcu, ut elementum odio varius nec. Integer ipsum enim, iaculis et egestas ac, condimentum ut tellus.
Verwenden von VBA-Stringkonstanten
VBA definiert eine Reihe von String-Konstanten für Sonderzeichen wie:
- vbCr: Carriage-Return 'Entspricht "\ r" in C-Sprachen.
- vbLf: Line-Feed 'Entspricht "\ n" in C-Sprachen.
- vbCrLf: Wagenrücklauf und Zeilenvorschub (eine neue Zeile in Windows)
- vbTab: Tabulatorzeichen
- vbNullString: eine leere Zeichenfolge wie ""
Sie können diese Konstanten mit Verkettung und anderen Stringfunktionen verwenden, um String-Literale mit Sonderzeichen zu erstellen.
Debug.Print "Hello " & vbCrLf & "World"
'Output:
'Hello
'World
Debug.Print vbTab & "Hello" & vbTab & "World"
'Output:
' Hello World
Dim EmptyString As String
EmptyString = vbNullString
Debug.Print EmptyString = ""
'Output:
'True
Die Verwendung von vbNullString
wird aufgrund der unterschiedlichen Kompilierung des Codes als bessere Vorgehensweise als der entsprechende Wert von ""
angesehen. Auf Zeichenketten wird über einen Zeiger auf einen zugewiesenen Speicherbereich zugegriffen, und der VBA-Compiler ist intelligent genug, um einen Nullzeiger zur Darstellung von vbNullString
. Dem Literal ""
wird Speicher zugewiesen, als wäre es eine vom Typ String typisierte Variante, wodurch die Verwendung der Konstante wesentlich effizienter wird:
Debug.Print StrPtr(vbNullString) 'Prints 0.
Debug.Print StrPtr("") 'Prints a memory address.