Buscar..


Observaciones

La asignación de literales de cadena en VBA está limitada por las limitaciones del IDE y la página de códigos de la configuración de idioma del usuario actual. Los ejemplos anteriores demuestran los casos especiales de cadenas escapadas, cadenas especiales no imprimibles y cadenas largas literales.

Al asignar literales de cadena que contienen caracteres que son específicos de una determinada página de códigos, es posible que deba tener en cuenta los problemas de internacionalización asignando una cadena de un archivo de recursos Unicode separado.

Escapando al "personaje

La sintaxis de VBA requiere que aparezca una cadena literal dentro de " marcas " , de modo que cuando su cadena deba contener comillas, deberá escapar / anteponer el " carácter con un extra " para que VBA entienda que desea que "" sea interpretado como una " cadena.

'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"

Asignando literales de cadena larga.

El editor de VBA solo permite 1023 caracteres por línea, pero generalmente solo los primeros 100-150 caracteres son visibles sin desplazamiento. Si necesita asignar literales de cadena larga, pero desea mantener su código legible, deberá usar continuaciones de línea y concatenación para asignar su cadena.

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 le permitirá usar un número limitado de continuaciones de línea (el número real varía según la longitud de cada línea dentro del bloque continuado), por lo que si tiene cadenas muy largas, deberá asignar y reasignar con concatenación .

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.

Usando constantes de cadena VBA

VBA define una serie de constantes de cadena para caracteres especiales como:

  • vbCr: Carriage-Return 'Igual que "\ r" en los idiomas de estilo C.
  • vbLf: Line-Feed 'Igual que "\ n" en los lenguajes de estilo C
  • vbCrLf: Carriage-Return & Line-Feed (una nueva línea en Windows)
  • vbTab: carácter de tabulación
  • vbNullString: una cadena vacía, como ""

Puede usar estas constantes con concatenación y otras funciones de cadena para construir cadenas literales con caracteres especiales.

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

Usar vbNullString se considera una mejor práctica que el valor equivalente de "" debido a las diferencias en la forma en que se compila el código. Se accede a las cadenas a través de un puntero a un área de memoria asignada, y el compilador VBA es lo suficientemente inteligente como para usar un puntero nulo para representar vbNullString . El literal "" se asigna a la memoria como si fuera una variante de tipo String, lo que hace que el uso de la constante sea mucho más eficiente:

Debug.Print StrPtr(vbNullString)    'Prints 0.
Debug.Print StrPtr("")              'Prints a memory address.


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow