2011-09-01 38 views
13

我正在尝试创建一个将希腊字符转换为拉丁文的替代方法()。在excel中声明一个Unicode格式的字符串字符串

的问题是,宣称

Dim Source As String 
Source = "αβγδεζηικλμνξοπρστθφω" 

源之后被解释为“áâãäåæçéêëìíîïðñóôõöù”
有没有在声明级别的任何方式使用Unicode?

+0

“将希腊字符转换为拉丁文”这是什么意思? α变成a,β变成b,γ变成g等。如果是这样,ζ,η,ξ应该转换成什么? –

+0

我有我自己的目标字符串,我有转换。它基本上,没关系.. – Stavros

+0

可能重复[如何在Visual Basic编辑器中键入货币符号](http://stackoverflow.com/questions/24384952/how-to-type-currency-symbols-in-visual - 基本编辑器) – GSerg

回答

7

您可以尝试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 

您可以创建一个数组来查找字符。

来源: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 
+0

不过,它不起作用。也许这是我声明变量的方式。你有没有设法做到这一点? – Stavros

+0

@Stavros:的确,我不能让它在一个完整的例子中工作。我添加了另一个解决方案(可以工作 - 取决于您想要做什么) – JMax

+0

我不想使用电子表格中的单元格。一切都应该在VB代码中。这不是我想要转换的全部字母表。只有我的例子中的字母是Source。 – Stavros

4

注意,Visual Basic编辑器不显示统一,但it does support manipulating Unicode strings

Dim strValue As String 
strValue = Range("A1").Value 
Range("B1").Value = Mid(strValue, 3) 
Range("C1").Value = StrReverse(strValue) 

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

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

8

如前所述,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标记