VBA
String letterali: caratteri di escape, non stampabili e continuazioni di riga
Ricerca…
Osservazioni
L'assegnazione di stringhe letterali in VBA è limitata dalle limitazioni dell'IDE e dalla codepage delle impostazioni della lingua dell'utente corrente. Gli esempi precedenti dimostrano i casi speciali di stringhe con escape, stringhe speciali non stampabili e stringhe letterali lunghe.
Quando si assegnano stringhe letterali contenenti caratteri specifici di una determinata tabella codici, potrebbe essere necessario prendere in considerazione problemi di internazionalizzazione assegnando una stringa da un file di risorse Unicode separato.
Sfuggire al "personaggio"
La sintassi VBA richiede che una stringa letterale appaia all'interno di "
marks "
, quindi quando la stringa deve contenere virgolette, è necessario sfuggire / anteporre "
carattere con un extra "
modo che VBA capisca che si intende che ""
sia interpretato come una "
stringa "
.
'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"
Assegnazione di valori letterali stringa lunghi
L'editor VBA consente solo 1023 caratteri per riga, ma in genere solo i primi 100-150 caratteri sono visibili senza scorrimento. Se è necessario assegnare valori letterali stringa lunghi, ma si desidera mantenere il codice leggibile, è necessario utilizzare la continuazione della riga e la concatenazione per assegnare la stringa.
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 ti consente di utilizzare un numero limitato di continuazioni di riga (il numero effettivo varia in base alla lunghezza di ogni riga all'interno del blocco continua), quindi se hai stringhe molto lunghe, dovrai assegnarle e riassegnarle con la concatenazione .
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.
Utilizzo delle costanti di stringa VBA
VBA definisce un numero di costanti di stringa per caratteri speciali come:
- vbCr: carriage-Return 'Uguale a "\ r" nelle lingue in stile C.
- vbLf: Line-Feed 'Uguale a "\ n" nelle lingue in stile C.
- vbCrLf: Carriage-Return & Line-Feed (una nuova riga in Windows)
- vbTab: Tab Character
- vbNullString: una stringa vuota, come ""
È possibile utilizzare queste costanti con concatenazione e altre funzioni di stringa per creare stringhe letterali con caratteri speciali.
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
L'utilizzo di vbNullString
è considerato una pratica migliore rispetto al valore equivalente di ""
causa delle differenze nella modalità di compilazione del codice. Le stringhe sono accessibili tramite un puntatore a un'area allocata della memoria e il compilatore VBA è abbastanza intelligente da utilizzare un puntatore nullo per rappresentare vbNullString
. Il letterale ""
è allocata alla memoria come se fosse una variante Variant tipizzata, rendendo l'uso della costante molto più efficiente:
Debug.Print StrPtr(vbNullString) 'Prints 0.
Debug.Print StrPtr("") 'Prints a memory address.