中国用户的VBA代码已更改

时间:2019-02-06 05:41:42

标签: excel vba

我有一个用VBA编写的Excel应用程序,该应用程序与北美地区以及欧洲地区的用户都可以正常工作。但是对于中国用户而言,相同的应用程序效果不佳。

在用户系统上调试时,我发现“±” 的代码已更改为“?

有人可以帮我吗?

此应用程序从隐藏的工作表中获取数据并在Excel中的UI中进行复制。我尝试更改语言设置,但是没有用。

If ext_mould_Search3.Range("G" & rowPointer) Like "*" & "±" & "*" Then
    ext_mould_Search3.Range("G" & rowPointer).Select
    ActiveCell.Replace What:=" ", Replacement:=vbNullString, LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
    MyText = ext_mould_Search3.Range("G" & rowPointer).Value
    Density = Left(MyText, Len(MyText) - 5)
Else
    Density = ext_mould_Search3.Range("G" & rowPointer)
End If

'Get data from the selected row
materialName = ext_mould_Search3.Range("D" & rowPointer)
Shore = ext_mould_Search3.Range("H" & rowPointer)
sap = ext_mould_Search3.Range("I" & rowPointer)
family = ext_mould_Search3.Range("J" & rowPointer)
short = ext_mould_Search3.Range("R" & rowPointer)

2 个答案:

答案 0 :(得分:0)

尝试将chrW用于不同语言的字符代码

您可以尝试对该字符串使用Unicode字符,如下所示:

If ext_mould_Search3.Range("G" & rowPointer) Like "*" & chrw(&H00B1) & "*" Then

这可能会解决您的问题。值得一试。

答案 1 :(得分:0)

中国开发者无法正确看到±的原因是由于他们使用的编码。通常,对于不在“ ASCII字符代码表” 1中的字符,建议遵循以下规则:

  • 在Excel中创建一个非常隐藏的工作表,命名为Settings或类似名称;
  • 在此处编写字符并在代码中从那里引用它;

enter image description here

您的情况是这样的:

If ext_mould_Search3.Range("G" & rowPointer) Like "*" & tblSettings.Range("A1") & "*" Then

如果要大量使用它,请考虑参考该工作表,制作一个带有只读常量的附加类。例如:

Property Get GermanAE()
    GermanAE = tblSettings.Range("A1").Value2
End Property

这可以通过以下方式调用:

Public Sub TestMe()    
   Dim DedicatedStrings As New DedicatedStrings
   Debug.Print DedicatedStrings.GermanAE    'ä
End Sub

如果仅使用少数几个,则可以考虑在Excel中使用named ranges,并像这样[GermanAE]来调用字符(或整个字符串),因为它看起来也很容易理解: / p>

如果ext_mould_Search3.Range(“ G”和rowPointer)像“ ”&[GermanAE]和“ ”这样,则

这是一篇有关编码的非常好的文章,解释了为什么所有设置的前128个字符都完全相同: