Ricerca…


introduzione

VBA può leggere e scrivere stringhe in qualsiasi lingua o script utilizzando Unicode . Tuttavia, esistono regole più severe per i token di identificazione .

Testo non latino in codice VBA

Nella cella A1 del foglio di calcolo, abbiamo il seguente pangram arabo:

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

VBA fornisce le funzioni AscW e ChrW per lavorare con codici carattere multibyte. Possiamo anche utilizzare gli array Byte per manipolare direttamente la variabile stringa:

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

Questo produce il seguente risultato per la lettera araba triste :

Primo carattere (ChrW): 1589
Primo carattere (binario): 00011000110101
Valore stringa (testo):?
Valore stringa (AscW): 1589
Valori byte (in decimale): 53 | 6
Valori byte (binari): 00110101 | 00000110

Tutta la stringa
??? ????? ????? ??????? ??????? ??? ??????? - ????? ???????? ???? ??????? ???????

Si noti che VBA non è in grado di stampare testo non latino nella finestra immediata anche se le funzioni stringa funzionano correttamente. Questa è una limitazione dell'IDE e non della lingua.

Identificatori non latini e copertura linguistica

Gli identificatori VBA (nomi di variabili e funzioni) possono utilizzare lo script latino e possono anche essere in grado di utilizzare script in giapponese , coreano , cinese semplificato e cinese tradizionale .

Lo script latino esteso ha una copertura completa per molte lingue:
Inglese, francese, spagnolo, tedesco, italiano, bretone, catalano, danese, estone, finlandese, islandese, indonesiano, irlandese, lojban, mapudungun, norvegese, portoghese, gaelico scozzese, svedese, tagalog

Alcune lingue sono solo parzialmente coperte:
Azero, croato, ceco, esperanto, ungherese, lettone, lituano, polacco, rumeno, serbo, slovacco, sloveno, turco, yoruba, gallese

Alcune lingue hanno una copertura scarsa o nulla:
Arabo, bulgaro, cherokee, dzongkha, greco, hindi, macedone, malayalam, mongolo, russo, sanscrito, thailandese, tibetano, urdu, uiguro

Le seguenti dichiarazioni variabili sono tutte valide:

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

Si noti che nell'IDE VBA, un singolo apostrofo all'interno di un nome di variabile non trasforma la linea in un commento (come avviene su Stack Overflow).

Inoltre, le lingue che usano due angoli per indicare una citazione «» possono usare quelle nei nomi di variabili deside- rano il fatto che le virgolette tipo "" non lo sono.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow