Поиск…


Вступление

VBA может читать и записывать строки на любом языке или скрипте с использованием Unicode . Тем не менее, существуют более строгие правила для токенов идентификатора .

Нелатинский текст в коде VBA

В ячейке A1 для электронных таблиц мы имеем следующую арабскую панграмму:

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

VBA предоставляет функции AscW и ChrW для работы с многобайтовыми кодами символов. Мы также можем использовать Byte массивы для непосредственного управления строковой переменной:

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

Это приводит к следующему выводу для арабского письма :

Первый символ (ChrW): 1589
Первый символ (двоичный): 00011000110101
Строковое значение (текст):?
Строковое значение (AscW): 1589
Значения байтов (в десятичной форме): 53 | 6
Значения байтов (двоичные): 00110101 | 00000110

Целая строка
??? ????? ????? ??????? ??????? ??? ??????? - ????? ???????? ???? ??????? ???????

Обратите внимание, что VBA не может печатать нелатинский текст в непосредственном окне, даже если строковые функции работают правильно. Это ограничение IDE, а не языка.

Нелатинские идентификаторы и языковой охват

Идентификаторы VBA (имена переменных и функций) могут использовать латинский скрипт и также могут использовать японские , корейские , упрощенные китайские и традиционные китайские скрипты.

Расширенный латинский скрипт имеет полный охват для многих языков:
Английский, Французский, Испанский, Немецкий, Итальянский, Бретонский, Каталонский, Датский, Эстонский, Финский, Исландский, Индонезийский, Ирландский, Лойбанский, Мапудунгун, Норвежский, Португальский, Шотландский гэльский, Шведский, Тагалог

Некоторые языки покрываются лишь частично:
Азербайджанский, хорватский, чешский, эсперанто, венгерский, латышский, литовский, польский, румынский, сербский, словацкий, словенский, турецкий, йоруба, валлийский

Некоторые языки практически не имеют охвата:
Арабский, болгарский, чероки, дзонгха, греческий, хинди, македонский, малаялам, монгольский, русский, санскритский, тайский, тибетский, урдуский, уйгурский

Все допустимые объявления переменных действительны:

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

Обратите внимание, что в VBA IDE один апостроф внутри имени переменной не превращает строку в комментарий (как это делается при переполнении стека).

Кроме того, на языках, которые используют два угла для указания цитаты «», разрешено использовать те, которые в именах переменных desipte используют тот факт, что котировки типа «» не являются.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow