Страницы: 1
RSS
Сумма прописью VBA для UNICODE
 
У иносранцев был вопрос
и так как VBA не работает с UNICODE пришлось помочь. Так как ТС взял вариант Михаила MCH,  то его вариант и корежил.
Вот что вышло

Скрытый текст


Естественно для надстройки все это проще. На лист положил и проблем нет.
Изменено: БМВ - 21.06.2020 23:07:52
По вопросам из тем форума, личку не читаю.
 
Добрый день, Михаил! Поскольку правила русского языка в этой части (числительные) вряд ли в ближайшее время поменяются, данное Вами решение я считаю оптимальным.

Где-то у меня был макрос (на скорую руку не нашел), который сканировал модуль VBA на предмет наличия "плохих" текстовых литералов,  менял эти литералы на элементы (статического) массива уровня модуля и генерировал подпрограмму для заполнения этого массива - подход, аналогичный примененному Вами.
Владимир
 
sokol92, Владимир, ну подход то к числительным не мой, а другого Михаила, я только натянул независимость от региональных настроек немного.
По вопросам из тем форума, личку не читаю.
 
Я имел в виду, что этот текст не придется часто менять. Хотя, если кто-то знает юникод на память... :D  
Владимир
 
sokol92,
я для простоты себе сделал
''Helper function
Код
'Function strtoUni(ele)
''For Each ele In razr
'    R = ""
'    For I = 1 To Len(ele)
'        R = R & "," & AscW(Mid(ele, I, 1))
'    Next
'    Debug.Print "array(" & Mid(R, 2) & "), _"
''Next
'
'End Function

:D
По вопросам из тем форума, личку не читаю.
 
Надо же, а я думал Вы руками каждый символ вбивали... :D  
Владимир
 
Цитата
VBA не работает с UNICODE
хм.. а я думал, что работает
По крайней мере, с кириллицей в коде ничего не случится (VBA код не повредится), - если она установлена на компе пользователя, он увидит читаемое сообщение в 99% случаев (кроме редких русскоязычный пользователей с изначально англоязычной виндой, ибо там кодовая страница другая)
А если не установлена, — этот пользователь скорее всего русским языком не владеет, и нет никакого смысла выводить ему текст на русском языке.
Единственное, что в коде нельзя, - это названия макросов и кодовые имена листов / книг на кириллице (это может вызвать неработоспособность некоторых макросов)
Или я не угадал?
 
Цитата
Игорь написал:
Или я не угадал?
Игорь, это не зависит от языка интерфейса, все зависит от региональных настроек и именно от этого

Но не зависимо от знаний русского у иностранцев может быть потребность вывести что либо на Русском, также как и у нас на арабском. В этом случае все что на листе прекрасно работает, но вот VBA код....  Совершенно недавно разбирали

Более того тут я помнится сломал себе все
По вопросам из тем форума, личку не читаю.
 
Добрый день! Чтобы побывать в шкуре иностранца, занесите в ячейку A1 греческую букву "Α" и выдайте

Код
Msgbox Range("A1")

Получите "?" (если у Вас, конечно, кодировкой по умолчанию не является Windows-1253).
Борьба с "нехорошими" текстовыми литералами в VBA является самым трудоемким шагом в обеспечении переносимости приложений на Excel VBA. Подробнее здесь.
Владимир
 
Нужно было иностранцу предложить UDF названную латиницей.
Например доработать вот ту изначальную https://www.planetaexcel.ru/techniques/7/46/ и дать ему уже в файле.
Изменено: Hugo - 17.06.2020 13:20:49
 
Здравствуйте, Игорь! Михаил именно это и сделал (функции аналогичны).
Владимир
 
Здравствуйте, Владимир! Не, я говорю о том, что для проверки сперва поменять только название, и дать файл - может оно и так полетит.
Ну а для того чтоб он мог копировать/изменять код - тогда вероятно кириллицу в коде нужно убирать.
Изменено: Hugo - 17.06.2020 14:22:41
 
Точно не полетит, если кодовая страница по умолчанию отлична от Windows 1251 - см. ссылку из #9.
Владимир
 
Но всё же - что будет результатом такой функции в ячейке?
Изменено: Hugo - 17.06.2020 14:44:45
 
Если аргумент функции равен 1, то для Windows-1252 будет îäèí (юникод U+00EE, U+00E4, U+00E8,  U+00ED)
Изменено: sokol92 - 17.06.2020 15:09:23
Владимир
 
Hugo,  исходной?  Ничего хорошего, точнее то  что было с персидским календарем

Цитата
sokol92 написал:
Windows-1252 будет îäèí
эээээээ не понял
Изменено: БМВ - 17.06.2020 14:50:49
По вопросам из тем форума, личку не читаю.
 
Я предлагаю вот что проверить - дать тому иносранцу файл, в котором уже есть и работает UDF SummaPropisju(n As Double)  и посмотреть на результат. Он ведь может в ячейку прописать кириллицу.
 
Hugo, так это можно и самостоятельно проверить, сменив то что указано №8
просто перезагрузка нужна. Но уверяю плохо будет :-)
По вопросам из тем форума, личку не читаю.
 
Именно этот эксперимент проделан в #15 (у нас есть система Windows-1252). Русские буквы (один) заменились на символы с тем же номером в кодовой таблице Windows-1252 (благодаря односимвольному формату хранения текстов модулей VBA в проекте Excel).
Изменено: sokol92 - 17.06.2020 15:11:22
Владимир
 
Спасибо. Понятно.
 
У иностранцев появилась потребность еще и в Украинском
Скрытый текст
Изменено: БМВ - 22.06.2020 22:05:49
По вопросам из тем форума, личку не читаю.
 
Медведь - полиглот
Владимир
 
sokol92, ну хоть не пылеглот.  :D
Я вот думаю, что проще и компактнее ,сделать так с массивами или сделать  вааще строковую константу, которую разбить, а потом преобразовать?
По вопросам из тем форума, личку не читаю.
 
Я использую для хранения текстовых литералов (скрытые) листы или свойства книги. Проблема в передаче модуля, содержащего функцию: Ваш модуль можно просто передать как текст. См. также #2.
Владимир
 
Владимир, все верно, если посмотреть на тот же Solver , то там на каждый язык лист.  Но  это для надстройки подойдет, а для условно самостоятельной функции - совершенно не подходит. Что касается вариантов- то читаемость кода конечно еще та.
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал:
Но  это для надстройки подойдет
То-есть если написать функцию с буквами кириллицы и сохранит как надстройку, то при загрузке надстройки на компе с другой кодировкой проблем не будет? Или как? Вопрос в том как не морочить себе голову. А пусть этим занимается компьютер.  
Страницы: 1
Наверх