Buscar..


Introducción

VBA puede leer y escribir cadenas en cualquier idioma o script utilizando Unicode . Sin embargo, existen reglas más estrictas para los identificadores de identificadores .

Texto no latino en código VBA

En la celda A1 de la hoja de cálculo, tenemos el siguiente pangram árabe:

صِف خَلقَ خَودِ كَمِثلِ الشَمسِ إِذ بَزَغَت - يَحظى الضَجيعُ بِها نَجلاءَ مِعطارِ

VBA proporciona las funciones AscW y ChrW para trabajar con códigos de caracteres de múltiples bytes. También podemos usar matrices de Byte para manipular la variable de cadena directamente:

Sub NonLatinStrings()

Dim rng As Range
Set rng = Range("A1")
Do Until rng = ""
    Dim MyString As String
    MyString = rng.Value
    
    ' AscW functions
    Dim char As String
    char = AscW(Left(MyString, 1))
    Debug.Print "First char (ChrW): " & char
    Debug.Print "First char (binary): " & BinaryFormat(char, 12)
    
    ' ChrW functions
    Dim uString As String
    uString = ChrW(char)
    Debug.Print "String value (text): " & uString        ' Fails! Appears as '?'
    Debug.Print "String value (AscW): " & AscW(uString)
    
    ' Using a Byte string
    Dim StringAsByt() As Byte
    StringAsByt = MyString
    Dim i As Long
    For i = 0 To 1 Step 2
        Debug.Print "Byte values (in decimal): " & _
            StringAsByt(i) & "|" & StringAsByt(i + 1)
        Debug.Print "Byte values (binary): " & _
            BinaryFormat(StringAsByt(i)) & "|" & BinaryFormat(StringAsByt(i + 1))
    Next i
    Debug.Print ""

    ' Printing the entire string to the immediate window fails (all '?'s)
    Debug.Print "Whole String" & vbNewLine & rng.Value
    Set rng = rng.Offset(1)
Loop

End Sub

Esto produce la siguiente salida para la letra árabe Sad :

Primera char (ChrW): 1589
Primer char (binario): 00011000110101
Valor de cadena (texto):?
Valor de cadena (AscW): 1589
Valores de byte (en decimal): 53 | 6
Valores de bytes (binarios): 00110101 | 00000110

Cadena entera
??? ????? ????? ??????? ??????? ??? ??????? - ????? ???????? ???? ??????? ???????

Tenga en cuenta que VBA no puede imprimir texto no latino en la ventana inmediata a pesar de que las funciones de cadena funcionan correctamente. Esta es una limitación del IDE y no del idioma.

Identificadores no latinos y cobertura de idiomas

Los identificadores de VBA (nombres de variables y funciones) pueden usar el script latino y también pueden usar scripts en japonés , coreano , chino simplificado y chino tradicional .

El script latino extendido tiene cobertura completa para muchos idiomas:
Inglés, francés, español, alemán, italiano, bretón, catalán, danés, estonio, finlandés, islandés, indonesio, irlandés, Lojban, mapudungun, noruego, portugués, gaélico escocés, sueco, tagalo

Algunos idiomas solo están cubiertos parcialmente:
Azerí, croata, checo, esperanto, húngaro, letón, lituano, polaco, rumano, serbio, eslovaco, esloveno, turco, yoruba, galés

Algunos idiomas tienen poca o ninguna cobertura:
Árabe, búlgaro, cherokee, dzongkha, griego, hindi, macedonio, malayalam, mongol, ruso, sánscrito, tailandés, tibetano, urdu, uigur

Las siguientes declaraciones de variables son todas válidas:

Dim Yec’hed As String 'Breton
Dim «Dóna» As String 'Catalan
Dim fræk As String 'Danish
Dim tšellomängija As String 'Estonian
Dim Törkylempijävongahdus As String 'Finnish
Dim j’examine As String 'French
Dim Paß As String 'German
Dim þjófum As String 'Icelandic
Dim hÓighe As String 'Irish
Dim sofybakni As String 'Lojban (.o’i does not work)
Dim ñizol As String 'Mapudungun
Dim Vår As String 'Norwegian
Dim «brações» As String 'Portuguese
Dim d’fhàg As String 'Scottish Gaelic

Tenga en cuenta que en el IDE de VBA, un solo apóstrofe dentro de un nombre de variable no convierte la línea en un comentario (como lo hace en Stack Overflow).

Además, los idiomas que usan dos ángulos para indicar una cita «» pueden usarlos en nombres de variables a pesar de que las comillas de tipo "" no lo son.



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