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 | 00000110

Chaî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.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow