excel VBA中的特殊字符(字母)(čćžšđ)

时间:2014-12-11 08:09:29

标签: excel vba excel-vba

我在excel 2010中使用包含ćčš等字母的VBA代码制作了一个程序。喜欢:Msgbox(“Čičazliša”)它运行正常。但问题是当我在excel 2013中打开该程序时,似乎它不支持这些字母。看起来Excel 2013在单元格和单元格公式中支持它们,但不在VBA中。然后我在执行CODE时遇到错误。 VBA用一些甚至不在键盘上的符号代替它们。我该如何解决这个问题。我相信它是语言设置的东西?!

5 个答案:

答案 0 :(得分:4)

正如BambiLongGone所说,奇怪的字符串不太可能奏效。 我会说你最好的镜头是this article。有一个名为Unicode to VBA的工具,您可以使用它来转换应用程序中的所有字符串。 例如:

Čiča gliša

将转换为

ChrW$(&H10C) & "i" & ChrW$(&H10D) & "a gli" & ChrW$(&H161) & "a"

答案 1 :(得分:1)

VBA是ANSI。它与Windows的互动。它的内部UTF16和COM也是UTF 16.但是它的文件格式也是ANSI,因此键入奇怪的字符串不太可能工作(因为它们不能按原样保存)。

因此,字符转换会自动发生,并且有一百万条规则控制它(大多数情况下都是无法访问的。)

如果遇到麻烦则分配给字节数组。也许你是从unicode文件中读取来绕过表格的ANSI。

Yourstring()=" blah blah"

如果传递给字符串函数,VB将字节数组视为字符串。

答案 2 :(得分:1)

您可以在它们出现的每一段代码中手动编写重音,您可以使用“查找和替换”来更快地完成。如果你有类似的东西:

MsgBox "Código único"

然后你可以找到并替换:

[ó]至[“& Chr(243)&”]

[ú]至[“& Chr(250)&”]

等等......

你会得到:

MsgBox "C" & Chr(243) & "digo " & Chr(250) & "nico"

如果你不知道每个重音字母的代码,那么你可以使用excel与函数“CODE”(函数字符相反)

此外,您可以使用互联网列表,如下所示:

ASCII Code - The extended ASCII table

我遇到了同样的问题并做了这个程序。使用Visual Studio Code非常快速地工作。

答案 3 :(得分:1)

Windows区域设置中存在问题:非Unicode程序的“区域/管理语言”,必须将其设置为可以处理特殊字符的语言。

答案 4 :(得分:0)

Function CroatianCharacters(CroatianCharacterOrderNumber As Integer, Optional UpperCase As Boolean = True, Optional DisplayAll As Boolean = False) As String

   'ISO Latin1 Extended A decimal code
    Dim AllCharacters
    UpperCaseLetters = "A,B,C," & ChrW(268) & "," & ChrW(262) & "," & "D," & "D" & ChrW(382) & "," & ChrW(272) & "," & _
        "E,F,G,H,I,J,K,L,Lj,M,N,Nj,O,P,R,S," & ChrW(352) & ",T,U,V,Z," & ChrW(381)
    LowerCaseLetters = "a,b,c," & ChrW(269) & "," & ChrW(263) & "," & "d," & "d" & ChrW(382) & "," & ChrW(273) & "," & _
        "e,f,g,h,i,j,k,l,lj,m,n,nj,o,p,r,s," & ChrW(353) & ",t,u,v,z," & ChrW(382)
    CroatianCharacters = LowerCaseLetters

    If (UpperCase = True) Then
        If (DisplayAll = False) Then
            AllCharacters = Split(UpperCaseLetters, ",")
            CroatianCharacters = AllCharacters(CroatianCharacterOrderNumber - 1)
        Else
            CroatianCharacters = UpperCaseLetters
        End If
    Else
        If (DisplayAll = False) Then
            AllCharacters = Split(LowerCaseLetters, ",")
            CroatianCharacters = AllCharacters(CroatianCharacterOrderNumber - 1)
        Else
            CroatianCharacters = LowerCaseLetters
        End If
    End If

End Function