VBA
Stringliterals - Ontsnappende, niet-afdrukbare karakters en regel-voortzettingen
Zoeken…
Opmerkingen
De toewijzing van string-literals in VBA wordt beperkt door de beperkingen van de IDE en de codepagina van de taalinstellingen van de huidige gebruiker. De bovenstaande voorbeelden tonen de speciale gevallen van ontsnapte tekenreeksen, speciale, niet-afdrukbare tekenreeksen en lange tekenreeks-literals.
Bij het toewijzen van tekenreeksliteralen die tekens bevatten die specifiek zijn voor een bepaalde codepagina, moet u mogelijk rekening houden met internationaliseringsproblemen door een tekenreeks toe te wijzen uit een afzonderlijk Unicode-bronbestand.
Ontsnappen aan het "karakter
VBA-syntaxis vereist dat er een letterlijke tekenreeks wordt weergegeven tussen "
tekens, dus als uw tekenreeks aanhalingstekens moet bevatten , moet u het "
teken met een extra "
omzeilen / voorvoegen zodat VBA begrijpt dat u de ""
wilt zijn geïnterpreteerd als een "
string.
'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 letterreeksen toewijzen
De VBA-editor staat slechts 1023 tekens per regel toe, maar meestal zijn alleen de eerste 100-150 tekens zichtbaar zonder te scrollen. Als u lange tekenreeksliteralen moet toewijzen, maar u wilt uw code leesbaar houden, moet u regel-voortzettingen en aaneenschakeling gebruiken om uw tekenreeks toe te wijzen.
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.
VBA laat je een beperkt aantal lijn-voortzettingen gebruiken (het werkelijke aantal varieert met de lengte van elke lijn binnen het vervolg-blok), dus als je heel lange reeksen hebt, moet je toewijzen en opnieuw toewijzen met aaneenschakeling .
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.
VBA-tekenreeksconstanten gebruiken
VBA definieert een aantal tekenreeksconstanten voor speciale tekens zoals:
- vbCr: Carriage-Return 'Hetzelfde als "\ r" in talen in C-stijl.
- vbLf: Line-Feed 'Hetzelfde als "\ n" in talen in C-stijl.
- vbCrLf: Carriage-Return & Line-Feed (een nieuwe regel in Windows)
- vbTab: Tabteken
- vbNullString: een lege string, zoals ""
U kunt deze constanten met aaneenschakeling en andere tekenreeksfuncties gebruiken om tekenreeksliteralen met speciale tekens te bouwen.
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
Het gebruik van vbNullString
wordt als een betere praktijk beschouwd dan de equivalente waarde van ""
vanwege verschillen in de manier waarop de code is gecompileerd. Strings zijn toegankelijk via een pointer naar een toegewezen geheugengebied en de VBA-compiler is slim genoeg om een null-pointer te gebruiken om vbNullString
te vertegenwoordigen. De letterlijke ""
krijgt geheugen toegewezen alsof het een String-typed Variant is, waardoor het gebruik van de constante veel efficiënter wordt:
Debug.Print StrPtr(vbNullString) 'Prints 0.
Debug.Print StrPtr("") 'Prints a memory address.