2011-09-01 24 views
13

Estoy tratando de crear un sustituto() que convertirá caracteres griegos a latin.declarando una cadena Unicode en vba en excel

El problema es que después de declarar

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

Fuente se interpreta como "áâãäåæçéêëìíîïðñóôõöù"
¿Hay alguna manera el uso de Unicode a nivel de declaración?

+0

"convertir caracteres griegos a latinos" ¿Qué significa esto? α se convierte en a, β se convierte en b, γ se convierte en g, etc. Si es así, ¿a qué se debería convertir ζ, η, ξ? –

+0

Tengo mi propia cadena de destino, donde tengo las conversiones. Básicamente, no importa ... – Stavros

+0

posible duplicado de [Cómo escribir símbolos de moneda en el Editor de Visual Basic] (http://stackoverflow.com/questions/24384952/how-to-type-currency-symbols-in-visual -basic-editor) – GSerg

Respuesta

7

Usted puede intentar StrConv:

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

Fuente: http://www.techonthenet.com/excel/formulas/strconv.php

[EDIT] Otra solución:

Se puede llegar a todos los personajes griego (mayúsculas y minúsculas) gracias a este procedimiento:

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 

Puede crear un matriz para encontrar el char, por ejemplo.

Fuente: http://www.excelforum.com/excel-programming/636544-adding-greek-letters.html

[EDIT 2] Aquí es un sub para crear la cadena que quería:

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

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

Aún así, no funciona. tal vez es la forma en que estoy declarando la variable.¿Has logrado hacer que esto funcione? – Stavros

+0

@Stavros: de hecho, no podría hacerlo funcionar en un ejemplo completo. Agregué otra solución (que funciona, dependiendo de lo que quieras hacer) – JMax

+0

No quiero usar Celdas de la hoja de cálculo. Todo debería estar en código VB. y no es todo el alfabeto que quiero convertir. Solo las letras que tengo en mi ejemplo como Fuente. – Stavros

4

Usted dice que su fuente se interpreta como "áâãäåæçéêëìíîïðñóôõöù".

Tenga en cuenta que el Editor de Visual Basic no muestra Unicode, pero 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) 

Si A1 contiene caracteres griegos, B1 y C1 contendrá caracteres griegos también después de ejecutar este código.

Simplemente no puede ver los valores correctamente en la ventana Inmediato, o en un MsgBox.

8

Como se mencionó anteriormente, VBA admite cadenas Unicode, pero no puede escribir cadenas Unicode dentro del código, porque el editor VBA solo permite codificar archivos VBA en la página de códigos de 0 Windows-1252.

Sin embargo, puede convertir un equivalente binario de la cadena Unicode que desea tener:

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

Utilice Bloc de notas para convertir la cadena: copiar y pegar la cadena Unicode, guarde el archivo como Unicode (UTF-no 8) y ábralo como ASCII (que es de hecho Windows-1252), luego cópielo y péguelo en el editor VBA sin los primeros dos caracteres (ÿþ), que es el marcador BOM