Страницы: 1
RSS
VBA. Избежать применения кириллицы в коде.
 
Известно, что применение кириллических символов в коде нежелательно.  
А иногда нужно.  
 
Например: в форму вводятся текстовые данные. Естественно, МарьВанне неудобно работать с записью Stoker__man или Kothegar_mughik, ей подавай нормального Кочегара_мужчину.  
Все бы ничего, пускай с мужиками по русски балуется :), но некоторые значения используются в коде для проверки.  
 
Можно на листе создать таблицу соответствий, типа Кочегар_мужчина=Stkr или =1.  
 
Есть ли другие способы ублажить МарьВанну и не допустить кириллицу в VBA?
 
{quote}{login=vikttur}{date=17.03.2012 03:00}{thema=VBA. Избежать применения кириллицы в коде.}{post}Известно, что применение кириллических символов в коде нежелательно.  
А иногда нужно.{/post}{/quote}Вить не путай. От того, что используются строковые кириллические значения в переменных, константах, вреда не будет. И сообщения в msgbox'ах мы выводим кириллицей. Я не люблю обзывать переменные, макросы, объекты кириллицей. Но это опять же мои заморочки. Многие называют:-) Ничего страшного, если все это будет использоваться в локализованных офисах.
Я сам - дурнее всякого примера! ...
 
Вопрос возник именно из-за этого: применение программы на разных локалях.  
 
Да, кстати, про MsgBox'ы не подумал. Это тоже интересно.  
"Кочегар_мужчина" в нерусской локали :)
 
А что, мне приходилось для одной фирмы, где часть сотрудников иностранцы, делать зазаз. Все надписи в формах, msgbox на английском. И даже фамилии клиентов транслитил для нерусских:-)
Я сам - дурнее всякого примера! ...
 
Кириллица в коде обычно необходима - для MSGBOX.  
Конечно, можно и этого избежать (сохраняя сообщения на скрытом листе настроек, и потом подставляя оттуда в качестве параметров MSGBOX), но это заметно усложнит написание кода.  
(ни разу такого пока не делал - многоязычные программы у меня ещё не заказывали)  
 
 
Я использую кириллицу в абсолютном большинстве программ, и с проблемами не сталкивался.  
(но кодовые имена листов настроек всегда меняю на латиницу, во избежание проблем. В остальном, проблемы максимум будут в нечитаемых сообщениях)  
 
Если заказчик из другой страны (дальнее зарубежье), и есть вероятность, что русский язык на компе не установлен, - сразу спрашиваю об этом (и если он подтверждает, что такая ситуация реальна, и пишу всё на английском - вплоть до текста сообщений об ошибках)  
 
С комментами в коде - тоже вопрос легко решаем.  
Поскольку на английском мне их писать лень - я их просто не пишу  
(русские строки комментариев могут вызвать неработоспособность программы на нерусских Windows - однажды сталкивался с таким, когда открытый в моём русском Excel иностранный файл содержал однострочные комменты, некоторые из которых на моём компе превратились в двустрочные, в результате замены символов иностранного алфавита их аналогами из нашей кодировки)
 
Понятно, спасибо.  
 
По поводу комментариев. Писать. Хотя бы для себя. Их же можно потом удалить, есть чем.
 
Ну а если нужно проверять например на соответствие с "ā" или "š"? :(  
Используйте ChrW()
 
"ā" - это было думано "a" с чёрточкой сверху, ну или любой другой диакритический символ.  
Мне так приходилось извращаться, когда делал "сумму прописью" на латышском - там именно в коде нужно было соорудить текстовую строку с этими символами, которые в явном виде в коде не прописать.
 
Я практически всегда пишу многоязычные программы. На мой взгляд, наиболее распространенная практика в Excel это создание таблицы соответствий именно на рабочем листе с загрузкой в память в виде массива или словаря в начале работы кода. Как вариант для надстроек, иногда используются текстовые файлы. Техник достаточно много.  
Не соглашусь с выссказыванием Игоря "Кириллица в коде обычно необходима - для MSGBOX" :)  
В моей практике, 99.(9)% многоязычного кода создается для перевода лейблов и комбобоксов на формах, листах или коммандбарах, и лишь незначительное число текстовых строк используется для сообщений, которых обычно не так много.
KL
 
Вот пример на скорую руку. Правильность отображения символов будет ессно зависить от кодировки неюникодовых шрифтов в Windows. Вместо комбобокса можно считывать язык локали Windows или версии Office. Я предпочитаю давать пользователю выбор. Обычно запоминаю выбранный язык в журнал: SaveSetting, GetSetting, DeleteSetting, ну или пишу в книгу.  
В .Net все несколько проще, т.к. есть Resources файл и проперть CurrentUICulture
KL
 
Резюме:  
а) способа проще, чем создание таблиц соответствий на листе, нет;  
б) если нет большой нужды в переводе на другие языки, можно не суетиться :)  
 
Всем спасибо.
 
Виктор, а каков критерий простоты в данном случае? Можно теоретически писать массив соответствий этикеток прямо в код:  
 
arr(1,1)="Close"  
arr(1,2)="Закрыть"  
arr(2,1)="Language"  
arr(2,2)="Язык"  
lang=2  
me.btn_Close.Caption=arr(1,lang)  
me.l_Lang.Caption=arr(2,lang)  
 
или на каждом шагу использовать If...Then, Select Case или IIf(...) :)  
 
Еще, если файл всегда вызывается из одной и той же директории (например надстройка), можно создать текстовые файлы для каждого языка (EN.txt, RU.txt и т.п.) и считывать соответствия из них.
KL
 
Спасибо, Кирилл.  
Вопрос, скорее, об ошибках, которые могут возникнуть, если символы нормально не определяются.  
Игорь ответил: "В остальном, проблемы максимум будут в нечитаемых сообщениях".  
 
По поводу подмены, если все-таки когда-нибудь придется - как для меня, на листе проще. Да и править легче. А уже с листа можно и в массив.
 
Виктор, вот зачем тут таблица?  
 
       If j = 2 Then  
         temp = temp & "t" & ChrW(363) & "ksto" & ChrW(353) & "i "  
 
А иначе в коде слово "tūkstoši" не задать (не знаю, как сейчас эти две буквы отобразяться...)
 
Что-то турецкое :)  
 
Да, если с "необычными" символами - согласен, в коде все-равно прописывать.
 
Вот до кучи, пример использования многоязычного интерфейса от Jan Karel Pieterse:  
 http://www.jkp-ads.com/Articles/DistributeMacro09.asp
KL
Страницы: 1
Читают тему
Наверх