在excel中声明vba中的unicode字符串

Sta*_*ros 15 unicode excel encoding vba excel-vba

我正在尝试创建一个替换(),将希腊字符转换为拉丁语.

问题是在宣布之后

Dim Source As String
Source = "?????????????????????"  
Run Code Online (Sandbox Code Playgroud)

来源被解释为"áâãäåæçéêëìíîïðñóôõöù"
是否有任何方式在声明级别使用unicode?

JMa*_*Max 13

你可以尝试StrConv:

StrConv("?????????????????????", vbUnicode)
Run Code Online (Sandbox Code Playgroud)

资料来源: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
Run Code Online (Sandbox Code Playgroud)

您可以创建一个数组来查找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
Run Code Online (Sandbox Code Playgroud)

  • `StrConv("字符串文字", vbUnicode)` *绝对*错误。它的作用:它首先创建一个包含该文字的 *Unicode* 字符串(如果该文字包含在当前 ANSI 代码页中无法表示的字符,那么它*此时已经是垃圾*),然后*再次*将其转换为 Unicode ,假装它是 ANSI 格式的。这会产生一个 [“double Unicode”](/sf/answers/1000501631/) 字符串。对于纯英文字符串,看起来每个字符后面都会插入一个“vbNullChar”;对于国家字符串,结果完全是垃圾。 (3认同)

z̫͋*_*z̫͋ 10

如前所述,VBA确实支持unicode字符串,但是您无法在代码中编写unicode字符串,因为VBA编辑器只允许在8位代码页中编码VBA文件Windows-1252.

但是,您可以转换您希望拥有的unicode字符串的二进制等效项:

str = StrConv("±²³´µ¶·¹º»¼½¾¿ÀÁÃĸÆÉ", vbFromUnicode)
'str value is now "?????????????????????"
Run Code Online (Sandbox Code Playgroud)

使用记事本转换字符串:复制粘贴unicode字符串,将文件保存为unicode(不是utf-8)并将其打开为ASCII(实际上是Windows-1252),然后将其复制粘贴到VBA编辑器中前两个字符(ÿþ),即BOM标记

  • 这是一个聪明的技巧,但它也遇到了完全相同的问题。由此产生的巧妙字符可能很容易无法在计算机当前的 ANSI 代码页中表示。例如,当我将该字符串粘贴到 VBA 编辑器中时,我得到“±???µ¶¶·??>>???AAAA??E”`。 (4认同)

tri*_*sse 6

你说你的来源被解释为"áâãäåæçéêëìíîïðñóôõöù".

请注意,Visual Basic编辑器不显示 Unicode,但它支持操作Unicode字符串:

Dim strValue As String
strValue = Range("A1").Value
Range("B1").Value = Mid(strValue, 3)
Range("C1").Value = StrReverse(strValue)
Run Code Online (Sandbox Code Playgroud)

如果A1包含希腊字符,则运行此代码后,B1和C1也将包含希腊字符.

您无法在立即窗口或MsgBox中正确查看值.


归档时间:

查看次数:

48752 次

最近记录:

8 年,9 月 前