Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 | 2 |

 

  Вопрос: Вывод иностранных символов в Excel Добавлено: 30.08.07 12:19  

Автор вопроса:  Nytrogen
Мне необходимо выводить на рабочие листы Excel и в диалоговые окна латышский текст. Дело в том, что в латышском языке встречаются особые символы (будь они прокляты), которых нет в стандартном наборе ASCII, либо они есть, но выводятся как чебурашки. Для их вывода я использую функцию Chr. Не подскажете, как быть?

Ответить

  Ответы Всего ответов: 21  

Номер ответа: 1
Автор ответа:
 Pavel



Вопросов: 0
Ответов: 82
 Профиль | | #1 Добавлено: 30.08.07 13:26
точно не знаю, но может в Языки и Региональные стандары - установить поддержку Латышского языка? У мя тоже китайские иероглифы не отображались, пока не подключили Кит. язык и они стали нормально отображаться

Ответить

Номер ответа: 2
Автор ответа:
 el-paso



Вопросов: 0
Ответов: 56
 Профиль | | #2 Добавлено: 30.08.07 18:58
Привет из Латвии.

Проблема на VB решается довольно просто. Если кто не в курсе, то VB свои строковые переменные в памяти хранит в формате Unicode. Проблема только в том, что программист свои исходники пишет в ASCII кодировке, и строковые переменные переводятся в Unicode используя текущие региональные настройки (подозреваю, что у автора вопроса они как раз таки русские).

Алгоритм решения прост и заключается в двойной переконвертации строк - сначала в настоящую ASCII цепочку байтов, и потом обратно в Unicode с использованием номера латышской локали (LCID).

На практике это выглядит так:

Function ToLatvian(s As String) As String
   ' параметр s -  это латышское слово
   '
   Dim b() As Byte ' для ASCII цепочки
   Dim r As String ' для результата
   '
   b = StrConv(s, vbFromUnicode)    ' UC -> ASCII
   r = StrConv(b, vbUnicode, 1062)  ' ASCII -> UC
   '
   ' Волшебное число:
   ' 1062 - LCID Латвийского региона!
   '
   ToLatvian = r
   '
End Function

Ответить

Номер ответа: 3
Автор ответа:
 Nytrogen



Вопросов: 18
Ответов: 186
 Профиль | | #3 Добавлено: 31.08.07 15:20
Спасибо конечно же, но как пользоваться этой функцией? Я же не могу в коде VBA ввести латышскую строку. Если в качестве аргумента я передаю Chr(i), то латышские символы всё равно не выводятся...

Ответить

Номер ответа: 4
Автор ответа:
 el-paso



Вопросов: 0
Ответов: 56
 Профиль | | #4 Добавлено: 31.08.07 16:02
:) Эм.. Просто переключайся на латышскую раскладку, печатай латышские слова и не обращай внимание на то, что латышские символы будут выглядеть неправильно. На выходе - в ячейках - ты будешь получать чистый латышский текст.

Например:

Dim s As String
s = "paplaðinâðana"
ActiveCell.FormulaR1C1 = ToLatvian(s)

Ответить

Номер ответа: 5
Автор ответа:
 el-paso



Вопросов: 0
Ответов: 56
 Профиль | | #5 Добавлено: 31.08.07 16:06
Вот именно этот кусок кода скопируй в код нового макроса и запусти:

Dim s As String
s = "paplaрinврana"
ActiveCell.FormulaR1C1 = ToLatvian(s)


Получишь слово на латышском.

Ответить

Номер ответа: 6
Автор ответа:
 Nytrogen



Вопросов: 18
Ответов: 186
 Профиль | | #6 Добавлено: 31.08.07 16:52
Если бы! В активной ячейке появляется "papla?in??ana". Может всё же дело в Excel?

Ответить

Номер ответа: 7
Автор ответа:
 el-paso



Вопросов: 0
Ответов: 56
 Профиль | | #7 Добавлено: 31.08.07 18:28
Тогда единственный встречный вопрос:
У тебя Windows XP или 95/98?

Ответить

Номер ответа: 8
Автор ответа:
 Nytrogen



Вопросов: 18
Ответов: 186
 Профиль | | #8 Добавлено: 31.08.07 19:37
Так, всё ясно... Vista! В XP всё работает. Спасибо огромное. А то я просто замучался с этим латышским!

Ответить

Номер ответа: 9
Автор ответа:
 Nytrogen



Вопросов: 18
Ответов: 186
 Профиль | | #9 Добавлено: 31.08.07 21:46
Правда латышский идёт, если выводишь на рабочий лист, а вот если в MsgBox, то выводятся английские символы... Так и должно быть?

Ответить

Номер ответа: 10
Автор ответа:
 el-paso



Вопросов: 0
Ответов: 56
 Профиль | | #10 Добавлено: 02.09.07 12:32
Сорри за задержку - не было времени :)

MsgBox - это чисто системная функция, она Unicode не поддерживает. Поэтому используй офисный вариант диалоговых окошек - метод Application.Assistant.DoAlert(). Там латышские символы отображаются как надо.

Ответить

Номер ответа: 11
Автор ответа:
 Nytrogen



Вопросов: 18
Ответов: 186
 Профиль | | #11 Добавлено: 04.09.07 19:06
Спасибо, не знал про такую функцию. А как насчёт латышского в пользовательских формах? Например в Caption формы гарумзиме никак не хочет залезать ни при редактировании, ни программно... =(

Ответить

Номер ответа: 12
Автор ответа:
 el-paso



Вопросов: 0
Ответов: 56
 Профиль | | #12 Добавлено: 05.09.07 00:33
К сожалению в VBA нет возможности назначить текст в формате Unicode для заголовка формы класса UserForm. :/

Однако, все контролы на форме спокойно отобразят латышский текст, если присваивать его программно и с использованием той самой функции (ToLatvian).

Кстати, полагаю, речь идет о VBA все еще, а не о чистом VB?

Ответить

Номер ответа: 13
Автор ответа:
 Nytrogen



Вопросов: 18
Ответов: 186
 Профиль | | #13 Добавлено: 08.09.07 20:37
Жалко, что нет такой возможности. Ну да, про VBA речь идёт...

Так вот что. Я протестировал эту самую фунццию ToLatvian на разных XP-шных компьютерах в Excel 2003. Корректно она работает только на одном из них. Может таки дело в региональных настройках?

Ответить

Номер ответа: 14
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #14 Добавлено: 08.09.07 22:03
el-paso, всё, что ты сказал в этом топике -- полная чушь.

Nytrogen, если надо хранить в исходнике на VB текст в кодировке, отличной от текущей системной, то делать это можно, только представив текст как строку вида ChrW(1234) & ChrW(2342) & ChrW(5421) & ...
Поскольку это неудобно, заведи скрытый лист, в ячейки которого помести все латышские сообщения. Потом бери их оттуда.

Ответить

Номер ответа: 15
Автор ответа:
 Nytrogen



Вопросов: 18
Ответов: 186
 Профиль | | #15 Добавлено: 09.09.07 21:21
Неудобно как раз таки брать латышские символы со скрытого листа... А так можно сразу писать в макросе. А вот за функцию ChrW спасибо.

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам