Код VBA меняется для пользователя из Китая - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть приложение Excel, написанное на VBA, которое хорошо работает как с пользователями в Северной Америке, так и в Европе.Но это же приложение плохо работает для пользователей в Китае.

При отладке в пользовательской системе я обнаружил, что "±" кода меняется на "? .

Может ли кто-нибудь помочь мне в этом?

Это приложение берет данные из скрытого листа и копирует их в нашем пользовательском интерфейсе в Excel. Я пытался изменить языкнастройки, но это не сработало.

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 голосов
/ 06 февраля 2019

Причина, по которой китайский разработчик неправильно видит ±, заключается в кодировке, которую они используют.Как правило, для символов, которых нет в таблице кодов символов Ascii1, рекомендуется придерживаться этого правила:

  • Создать в 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и вызывая символы (или целую строку) следующим образом: [GermanAE], потому что это также выглядит вполне понятным:

Если ext_mould_Search3.Range ("G" & rowPointer) Like "" &[GermanAE] & "" Тогда

Это действительно хорошая статья для кодирования, объясняющая, почему первые 128 символов одинаковы для всех настроек:

0 голосов
/ 06 февраля 2019

Попробуйте использовать chrW для кодов символов разных языков

Вы можете попробовать символ Unicode для этой строки, как показано ниже:

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

Это может исправить вашепроблема.Стоит попробовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...