Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在excel中的vba中声明unicode字符串_Excel_Unicode_Encoding_Vba - Fatal编程技术网

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

在excel中的vba中声明unicode字符串,excel,unicode,encoding,vba,Excel,Unicode,Encoding,Vba,我正在尝试创建一个替换()来将希腊字符转换为拉丁字符 问题是 Dim Source As String Source = "αβγδεζηικλμνξοπρστθφω" 来源被解释为“峈峈峈峈峈峈峈峈峈峈峈峈峈峈峈23752 有没有办法在声明级别使用unicode?您可以尝试StrConv: StrConv("αβγδεζηικλμνξοπρστθφω", vbUnicode) 资料来源: [编辑]另一个解决方案: 通过以下步骤,您可以获取每个希腊字符(小写和大写): Sub x()

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

问题是

Dim Source As String
Source = "αβγδεζηικλμνξοπρστθφω"  
来源被解释为“峈峈峈峈峈峈峈峈峈峈峈峈峈峈峈23752
有没有办法在声明级别使用unicode?

您可以尝试
StrConv

StrConv("αβγδεζηικλμνξοπρστθφω", vbUnicode)
资料来源:

[编辑]另一个解决方案:

通过以下步骤,您可以获取每个希腊字符(小写和大写):

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

资料来源:

[编辑2]以下是用于生成所需字符串的子项:

Sub greekAlpha()
Dim sAlpha As String
Dim lLetter As Long

For lLetter = &H3B1 To &H3C9
    sAlpha = sAlpha & ChrW(lLetter)
Next
End Sub

你说你的资料来源被解释为“峈峈峈峈峈峈峈峈峈峈峈峈峈峈峈23752

请注意,Visual Basic编辑器不显示Unicode,但:

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


您无法在即时窗口或MsgBox中正确查看值。

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

但是,您可以转换希望具有的unicode字符串的二进制等价物:

str = StrConv("±²³´µ¶·¹º»¼½¾¿ÀÁÃĸÆÉ", vbFromUnicode)
'str value is now "αβγδεζηικλμνξοπρστθφω"

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

,仍然无法工作。也许这就是我声明变量的方式。你成功地做到了吗?@Stavros:事实上,我不能用一个完整的例子来说明。我添加了另一个解决方案(它可以工作-取决于您想做什么),我不想使用电子表格中的单元格。一切都应该在VB代码。我想转换的不是整个字母表。只有我的示例中的字母作为源。@Stavros:我构建了一个过程,将使用正确的字符创建字符串,但由于我仍然不知道您试图实现什么,我只能评估一次尝试…
StrConv(“字符串文字”,vbUnicode)
是绝对错误的。它的作用:它首先创建一个包含文字的Unicode字符串(如果文字中包含的字符在当前ANSI代码页中不可表示,则此时它已经是垃圾),然后再次将其转换为Unicode,假装它在ANSI中。这将产生一个字符串。对于纯英语字符串,看起来每个字符后面都插入了一个
vbNullChar
;对于国家字符串,结果完全是垃圾。“将希腊字符转换为拉丁语”这是什么意思?α变成a,β变成b,γ变成g等等。?如果是这样,ζ,η,ξ应该转换成什么?我有我自己的目标字符串,在那里我有转换。基本上,这没关系。这是一个聪明的把戏,但它也有同样的问题。生成的智能字符可能很容易无法在计算机的当前ANSI代码页中表示。例如,当我将该字符串粘贴到我的VBA编辑器中时,我会得到
“±???µ¨¨¨¨¨¨¨¨¨¨¨¨¨»???AAAA???E”
str = StrConv("±²³´µ¶·¹º»¼½¾¿ÀÁÃĸÆÉ", vbFromUnicode)
'str value is now "αβγδεζηικλμνξοπρστθφω"