0

我有一个用 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)
4

2 回答 2

1

中国开发者看不到正确的±原因是因为他们使用的编码。一般来说,对于不在 Ascii 字符代码表 1 中的字符,建议遵循以下规则:

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

在此处输入图像描述

在你的情况下,它会是这样的:

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 中使用命名范围,并像这样调用字符(或整个字符串)[GermanAE],因为它看起来也很容易理解:

If ext_mould_Search3.Range("G" & rowPointer) Like " " & [GermanAE] & " " 那么

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

于 2019-02-06T12:07:27.493 回答
0

尝试对不同语言的字符代码使用 chrW

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

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

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

于 2019-02-06T07:19:19.697 回答