VBA
Caractères non latins
Recherche…
Introduction
VBA peut lire et écrire des chaînes dans n'importe quel langage ou script utilisant Unicode . Cependant, des règles plus strictes sont en place pour les jetons d'identifiant .
Texte non latin dans le code VBA
Dans la cellule de feuille de calcul A1, nous avons le pangram arabe suivant:
صِف خَلقَ خَودِ كَمِثلِ الشَمسِ إِذ بَزَغَت - يَحظى الضَجيعُ بِها نَجلاءَ مِعطارِ
VBA fournit les fonctions AscW
et ChrW
pour travailler avec des codes de caractères multi-octets. Nous pouvons également utiliser des tableaux d' Byte
pour manipuler directement la variable chaîne:
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
Cela produit la sortie suivante pour la lettre arabe Sad :
Premier caractère (ChrW): 1589
Premier caractère (binaire): 00011000110101
Valeur de chaîne (texte):?
Valeur de chaîne (AscW): 1589
Valeurs d'octets (en décimal): 53 | 6
Valeurs d'octets (binaires): 00110101 | 00000110Chaîne entière
??? ????? ????? ??????? ??????? ??? ??????? - ????? ???????? ???? ??????? ???????
Notez que VBA est incapable d'imprimer du texte non latin dans la fenêtre immédiate même si les fonctions de chaîne fonctionnent correctement. Ceci est une limitation de l'EDI et non du langage.
Identificateurs non latins et couverture linguistique
Les identifiants VBA (noms de variables et de fonctions) peuvent utiliser le script latin et peuvent également utiliser des scripts japonais , coréen , chinois simplifié et chinois traditionnel .
Le script latin étendu a une couverture complète pour de nombreuses langues:
Anglais, français, espagnol, allemand, italien, breton, catalan, danois, estonien, finnois, islandais, indonésien, irlandais, lojban, mapudungun, norvégien, portugais, gaélique écossais, suédois, tagalog
Certaines langues ne sont que partiellement couvertes:
Azéri, croate, tchèque, espéranto, hongrois, letton, lituanien, polonais, roumain, serbe, slovaque, slovène, turc, yoruba, gallois
Certaines langues ont peu ou pas de couverture:
Arabe, bulgare, cherokee, dzongkha, grec, hindi, macédonien, malayalam, mongol, russe, sanscrit, thaï, tibétain, ourdou, ouïghour
Les déclarations de variables suivantes sont toutes valides:
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
Notez que dans l'IDE VBA, une seule apostrophe dans un nom de variable ne transforme pas la ligne en commentaire (comme c'est le cas avec Stack Overflow).
En outre, les langages qui utilisent deux angles pour indiquer une citation «» sont autorisés à utiliser ceux des noms de variables pour la suppression du fait que les guillemets de type "" ne le sont pas.