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.


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow