Объявление строки unicode в vba в excel
Я пытаюсь создать substitute(), который преобразует греческие символы в латинский.
Проблема заключается в том, что после объявления
Dim Source As String
Source = "αβγδεζηικλμνξοπρστθφω"
Источник интерпретируется как "áâãäææêéêëìíîïðñóôõöù"
есть ли способ использовать unicode на уровне объявления?
Ответы
Ответ 1
Вы можете попробовать StrConv
:
StrConv("αβγδεζηικλμνξοπρστθφω", vbUnicode)
Источник: http://www.techonthenet.com/excel/formulas/strconv.php
[EDIT] Другое решение:
Вы можете получить каждый греческий символ (нижний и верхний регистр) благодаря этой процедуре:
Sub x()
Dim i As Long
For i = 913 To 969
With Cells(i - 912, 1)
.Formula = "=dec2hex(" & i & ")"
.Offset(, 1).Value = ChrW$(i)
End With
Next i
End Sub
Вы можете создать массив, чтобы найти char например.
Источник: http://www.excelforum.com/excel-programming/636544-adding-greek-letters.html
[РЕДАКТИРОВАТЬ 2] Ниже вы можете создать строку, которую вы хотели:
Sub greekAlpha()
Dim sAlpha As String
Dim lLetter As Long
For lLetter = &H3B1 To &H3C9
sAlpha = sAlpha & ChrW(lLetter)
Next
End Sub
Ответ 2
Как уже упоминалось ранее, VBA поддерживает строки unicode, однако вы не можете писать строки Unicode внутри вашего кода, потому что редактор VBA позволяет кодировать файлы VBA только в 8-битной кодовой странице Windows-1252
.
Однако вы можете преобразовать двоичный эквивалент строки unicode, который вы хотите:
str = StrConv("±²³´µ¶·¹º»¼½¾¿ÀÁÃĸÆÉ", vbFromUnicode)
'str value is now "αβγδεζηικλμνξοπρστθφω"
Используйте блокнот для преобразования строки: скопируйте-вставьте строку юникода, сохраните файл как unicode (а не utf-8) и откройте его как ASCII (на самом деле это Windows-1252), затем скопируйте его в папку Редактор VBA без первых двух символов (ÿþ), который является маркером спецификации
Ответ 3
Вы говорите, что ваш источник интерпретируется как "áâãåæçéêëììíîïðñóôõöù".
Обратите внимание, что редактор Visual Basic не отображает Unicode, но он поддерживает управление строками Unicode:
Dim strValue As String
strValue = Range("A1").Value
Range("B1").Value = Mid(strValue, 3)
Range("C1").Value = StrReverse(strValue)
Если A1 содержит греческие символы, B1 и C1 также будут содержать греческие символы после запуска этого кода.
Вы просто не можете правильно просматривать значения в окне Immediate или в MsgBox.