수색…


소개

VBA는 유니 코드를 사용하여 모든 언어 또는 스크립트로 문자열을 읽고 쓸 수 있습니다. 그러나 식별자 토큰에 대한보다 엄격한 규칙이 있습니다.

VBA 코드의 비 라틴 텍스트

스프레드 시트 셀 A1에는 다음 아랍어 팡ram이 있습니다.

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

VBA는 멀티 바이트 문자 코드로 작업 할 수있는 AscWChrW 기능을 제공합니다. 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

아랍 문자에 대한 다음과 같은 결과가 나타납니다.

첫 번째 char (ChrW) : 1589
첫 번째 char (바이너리) : 00011000110101
문자열 값 (텍스트) :?
문자열 값 (AscW) : 1589
바이트 값 (십진수) : 53 | 6
바이트 값 (바이너리) : 00110101 | 00000110

전체 문자열
??? ????? ????? ??????? ??????? ??? ??????? - ????? ???????? ???? ??????? ???????

문자열 기능이 제대로 작동하더라도 VBA에서는 라틴어가 아닌 텍스트를 직접 창에 인쇄 할 수 없습니다. 이는 언어가 아닌 IDE의 제한 사항입니다.

비 라틴어 식별자 및 언어 적용 범위

VBA 식별자 (변수 및 함수 이름)는 라틴 스크립트를 사용할 수 있으며 일본어 , 한국어 , 중국어 간체중국어 번체 스크립트를 사용할 수도 있습니다.

확장 된 라틴어 스크립트는 여러 언어에 대해 다음과 같은 내용을 다룹니다.
영어, 프랑스어, 스페인어, 독일어, 이탈리아어, 브르타뉴 어, 카탈로니아 어, 덴마크어, 에스토니아어, 핀란드어, 아이슬란드 어, 인도네시아어, 아이랜드어, Lojban, Mapudungun, 노르웨이어, 포르투갈어, 스코틀랜드 게 일어, 스웨덴어, 타갈로그어

일부 언어는 부분적으로 만 적용됩니다.
아제 리어, 크로아티아어, 체코 어, 에스페란토어, 헝가리어, 라트비아어, 리투아니아어, 폴란드어, 루마니아어, 세르비아어, 슬로바키아어, 슬로베니아어, 터키어, 요 루바 어, 웨일스 어

일부 언어는 거의 또는 전혀 적용되지 않습니다.
아랍어, 불가리아어, 체로키 어, Dzongkha, 그리스어, 힌디어, 마케도니아 어, 말라 얄 람어, 몽골어, 러시아어, 산스크리트어, 태국어, 티베트어, 우르두어, 위구르어

다음 변수 선언은 모두 유효합니다.

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에서 변수 이름 내의 단일 어포 스트로피는 줄을 주석으로 바꾸지 않습니다 (스택 오버플로 에서처럼).

또한 따옴표«»를 나타 내기 위해 두 개의 각도를 사용하는 언어는 변수 이름에있는 따옴표를 사용하는 것이 허용되지 않습니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow