我正在尝试创建一个substitute()函数,将希腊字符转换为拉丁字符。
问题在于,在声明完函数之后,我该如何实际执行替换操作?
Dim Source As String
Source = "αβγδεζηικλμνξοπρστθφω"
源代码被解释为 "áâãäåæçéêëìíîïðñóôõöù"
是否有办法在声明级别使用 Unicode?
我正在尝试创建一个substitute()函数,将希腊字符转换为拉丁字符。
问题在于,在声明完函数之后,我该如何实际执行替换操作?
Dim Source As String
Source = "αβγδεζηικλμνξοπρστθφω"
源代码被解释为 "áâãäåæçéêëìíîïðñóôõöù"
是否有办法在声明级别使用 Unicode?
StrConv
:StrConv("αβγδεζηικλμνξοπρστθφω", vbUnicode)
来源: http://www.techonthenet.com/excel/formulas/strconv.php
[编辑] 另一个解决方案:
您可以使用此过程获取每个希腊字符(小写和大写):
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
你可以创建一个数组来查找字符。Sub greekAlpha()
Dim sAlpha As String
Dim lLetter As Long
For lLetter = &H3B1 To &H3C9
sAlpha = sAlpha & ChrW(lLetter)
Next
End Sub
StrConv("string literal", vbUnicode)
是绝对错误的。它的作用是首先创建一个包含该字面值的Unicode字符串(如果该字面值包含在当前ANSI代码页中无法表示的字符,则此时它已经是垃圾),然后再次将其转换为Unicode,假装它是ANSI编码。这导致出现“双重Unicode”字符串。对于只包含英文的字符串,它看起来像每个字符后面都插入了vbNullChar
;对于国际化字符串,结果是完全的垃圾。 - GSerg如先前所述,VBA支持Unicode字符串,但您不能在代码中编写Unicode字符串,因为VBA编辑器仅允许对VBA文件进行8位代码页Windows-1252
编码。
但是,您可以将所需的Unicode字符串转换为其二进制等效形式:
str = StrConv("±²³´µ¶·¹º»¼½¾¿ÀÁÃĸÆÉ", vbFromUnicode)
'str value is now "αβγδεζηικλμνξοπρστθφω"
使用记事本将字符串转换:复制粘贴Unicode字符串,将文件保存为Unicode(不是UTF-8),并将其作为ASCII(实际上是Windows-1252)打开,然后将其粘贴到VBA编辑器中,但不包括前两个字符(ÿþ),这是BOM标记。
您说您的源代码被解释为“áâãäåæçéêëìíîïðñóôõöù”。
请注意,Visual Basic编辑器不会显示Unicode,但是它支持操作Unicode字符串:
Dim strValue As String
strValue = Range("A1").Value
Range("B1").Value = Mid(strValue, 3)
Range("C1").Value = StrReverse(strValue)