Zoeken…


Invoering

VBA kan tekenreeksen in elke taal of script lezen en schrijven met Unicode . Er zijn echter strengere regels voor identificatietokens .

Niet-Latijnse tekst in VBA-code

In spreadsheetcel A1 hebben we het volgende Arabische pangram:

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

VBA biedt de AscW en ChrW functies om te werken met multi-byte tekencodes. We kunnen ook Byte arrays gebruiken om de tekenreeksvariabele rechtstreeks te manipuleren:

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

Dit levert de volgende uitvoer op voor de Arabische letter Sad :

Eerste char (ChrW): 1589
Eerste char (binair): 00011000110101
Tekenreekswaarde (tekst):?
Stringwaarde (AscW): 1589
Bytewaarden (in decimalen): 53 | 6
Bytewaarden (binair): 00110101 | 00000110

Hele String
??? ????? ????? ??????? ??????? ??? ??????? - ????? ???????? ???? ??????? ???????

Merk op dat VBA niet in staat is om niet-Latijnse tekst naar het directe venster af te drukken, hoewel de tekenreeksfuncties correct werken. Dit is een beperking van de IDE en niet de taal.

Niet-Latijnse ID's en taaldekking

VBA-id's (namen van variabelen en functies) kunnen het Latijnse schrift gebruiken en mogelijk ook Japanse , Koreaanse , Vereenvoudigde Chinese en Traditionele Chinese scripts gebruiken.

Het uitgebreide Latijnse schrift heeft volledige dekking voor vele talen:
Engels, Frans, Spaans, Duits, Italiaans, Bretons, Catalaans, Deens, Estlands, Fins, IJslands, Indonesisch, Iers, Lojban, Mapudungun, Noors, Portugees, Schots-Gaelisch, Zweeds, Tagalog

Sommige talen worden slechts gedeeltelijk behandeld:
Azeri, Kroatisch, Tsjechisch, Esperanto, Hongaars, Lets, Litouws, Pools, Roemeens, Servisch, Slowaaks, Sloveens, Turks, Yoruba, Welsh

Sommige talen hebben weinig of geen dekking:
Arabisch, Bulgaars, Cherokee, Dzongkha, Grieks, Hindi, Macedonisch, Malayalam, Mongools, Russisch, Sanskriet, Thais, Tibetaans, Urdu, Uyghur

De volgende variabele verklaringen zijn allemaal geldig:

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

Merk op dat in de VBA IDE een enkele apostrof binnen een variabelenaam de regel niet in een opmerking verandert (zoals bij Stack Overflow).

Talen die twee hoeken gebruiken om een citaat «» aan te geven, mogen ook die in variabelenamen gebruiken, omdat het "" -type citaten dat niet zijn.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow