Функция VBA не может вернуть арабскую строку в Excel 2007? - PullRequest
3 голосов
/ 07 февраля 2012

У меня была функция VBA, которая возвращает арабскую строку (она предназначена для преобразования числа в арабскую письменную строку)

Я использовал его в Excel 2007 на Windows XP

, но когда я изменилв windows 7 функция начала возвращать что-то вроде этого:

ÝÞØ ÎãÓÉ ÂáÇÝ æ ËãÇäãÇÆÉ Ã ÑÑÈÚÉ æ æÃÑÈÚæäæ 59 ÇÛÇÛíÑ

я могу написать арабский в редакторе vba, но не могу его просмотретьв ячейке Excel.

Ответы [ 3 ]

7 голосов
/ 07 февраля 2012

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 لاغير
0 голосов
/ 27 сентября 2017

в VB Editor: - 1 - щелкнуть инструменты 2 - Выбрать параметры 3 - щелкнуть Формат редактора 4 - Изменить шрифт на (Новый курьер (арабский)) 5 - нажать OK, теперь вы можете писать на английском и арабском языках. Надеюсь, что так и будет решить вашу проблему

0 голосов
/ 01 марта 2014

Под ОС Windows 7

STEP 1: GOTO CONTROL PANEL AND SELECT REGION AND LANGUAGE
STEP 2: SELECT ADMINISTRATIVE TAB  
        CHOOSE BUTTON SYSTEM LOCAL LANGUAGE
        COMPUTER WILL SHOW YOU A SCREEN TO SELECT ANY ARABIC LANG
STEP 3: SELECT YOUR LOCAL LANGUAGE  CLOSE ALL 
       NOW YOU GOTO VBA EDITOR PAGE YOU WILL BE HAPPY
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...