Excel хранит строки в Unicode.Кажется, что используемая вами строка использует кодировку ANSI арабский (Windows).В вашей предыдущей установке Windows XP вы, вероятно, включали эти языковые настройки и не настраивали их в Windows 7. Если я сохраню вашу строку в текстовом файле и импортирую ее в Excel, используя мастер данных (импорт текста), указавна входной кодовой странице, как на арабском языке ANSI, он возвращает:Возможно, вы захотите преобразовать свой старый текст из определенной кодовой страницы (предположительно, ANSI арабский) в более гибкий UTF-8, чтобы полностью избежать необходимости настраивать отдельные кодовые страницы.
Неясно, где вы получаете арабский языкстроки из.Может быть, база данных или может быть жестко закодированы в вашем старом коде VBA.В идеале это из базы данных, и вы можете сделать там однократное преобразование (чтобы преобразовать эти строки в Unicode).Тогда ваш код VBA может последовательно использовать Unicode в качестве нативной кодировки.
В качестве альтернативы, если вам нужно динамически преобразовывать арабские строки ANSI в вашем коде, вы можете использовать функцию vba StrConv () с помощью параметра, чтобы указать, чтокодировка вашей строки в ( из этой таблицы ).Эта процедура немного недружелюбна, так как вам нужно сначала преобразовать входную строку в байтовый массив.Вот пример того, как сделать это преобразование:
Function convertANSIArabic2Unicode(inputStr As String) As String
Dim n As Integer
Dim i As Integer
Dim inBytes() As Byte
Dim sUnicode As String
' Convert input string to byte array
n = Len(inputStr)
ReDim inBytes(n + 1)
For i = 1 To n
inBytes(i) = AscB(Mid(inputStr, i, 1))
Next
' Convert byte array to unicode using Arabic coding
sUnicode = StrConv(inBytes, vbUnicode, &H401)
' remove starting null
iPos = InStr(sUnicode, Chr(0))
If iPos > 0 Then sUnicode = Mid(sUnicode, iPos + 1)
convertANSIArabic2Unicode = sUnicode
End Function
Где это будет называться так:
Dim xStr As String
xStr = "ÝÞØ ÎãÓÉ ÂáÇÝ æ ËãÇäãÇÆÉ æ ÃÑÈÚÉ æ æÃÑÈÚæä æ 59 áÇÛíÑ"
ActiveCell = convertANSIArabic2Unicode(xStr)
В результате появится ячейка:
فقط خمسة آلاف و ثمانمائة و أربعة و وأربعون و 59 لاغير