VBA
Personajes no latinos
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 | 00000110Cadena 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.