2011-09-01 39 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標記