Sök…


Introduktion

VBA kan läsa och skriva strängar på vilket språk som helst eller manus med Unicode . Det finns emellertid strängare regler för Identifiering Tokens .

Icke-latin text i VBA-kod

I kalkylarkcell A1 har vi följande arabiska pangram:

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

VBA tillhandahåller AscW och ChrW funktionerna för att arbeta med ChrW med flera byte. Vi kan också använda Byte arrayer för att manipulera strängvariabeln direkt:

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

Detta ger följande utgång för arabiska bokstaven Sad :

Första char (ChrW): 1589
Första char (binärt): 00011000110101
Strängvärde (text):?
Strängvärde (AscW): 1589
Bytevärden (i decimal): 53 | 6
Bytevärden (binär): 00110101 | 00000110

Hela strängen
??? ????? ????? ??????? ??????? ??? ??????? - ????? ???????? ???? ??????? ???????

Observera att VBA inte kan skriva ut icke-latin text i det omedelbara fönstret även om strängfunktionerna fungerar korrekt. Detta är en begränsning av IDE och inte språket.

Icke-latinska identifierare och språktäckning

VBA-identifierare (variabla och funktionsnamn) kan använda det latinska skriptet och kan också kunna använda japanska , koreanska , förenklade kinesiska och traditionella kinesiska skript.

Det utökade latinska manuset har full täckning för många språk:
Engelska, franska, spanska, tyska, italienska, bretonska, katalanska, danska, estniska, finska, isländska, indonesiska, irländska, Lojban, Mapudungun, norska, portugisiska, skotska gäliska, svenska, tagalog

Vissa språk omfattas endast delvis:
Azeri, kroatiska, tjeckiska, esperanto, ungerska, lettiska, litauiska, polska, rumänska, serbiska, slovakiska, slovenska, turkiska, Yoruba, walesiska

Vissa språk har liten eller ingen täckning:
Arabiska, bulgariska, Cherokee, Dzongkha, grekiska, hindi, makedonska, malayalam, mongoliska, ryska, sanskrit, thailändska, tibetanska, urdu, Uyghur

Följande variabla deklarationer är alla giltiga:

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

Observera att i VBA IDE gör en enda apostrof inom ett variabelnamn inte raden till en kommentar (som den gör på Stack Overflow).

Även språk som använder två vinklar för att ange en offert «» tillåter att använda de i variabla namn fördriver det faktum att "" -typ-citaten inte är det.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow