Страницы: 1
RSS
Числа прописью. Сделано гениально!
 
Всего 30! строк кода VBA  
На русском  
Попытки на украинском для меня неудачны  
Кто может?
 
Михаил думаю и может.  
Если Вас поймёт :)
 
код мой, только был реализован в виде UDF и там было не более 20 строк  
 
что не так:  
1. У Вас перепутаны рода в массиве едениц у 2,3 элемента с 12 и 13  
2,3 - должен быть мужской род, 12, 13 - женский  
 
2. зачем то добавили пробел в 11 элемент массива единиц, на результат возможно не влияет  
 
3. в коде    
IIf(i = Len(rub) - 5 And ...  
замените на    
IIf(i >= Len(rub) - 5 And ...  
 
в остальное не вникал
 
МСH. голова!!!  
Пока работает!  
Спасибо!  
Ребята, пользуйтесь
 
Пропись предпочтительнее оставить в виде функции, а не процедуры.  
Функция гибче и универсальнее, и из процедуры ее вызвать не проблема.
 
Ребята, пользуйтесь  
 
Вот только как пользоваться?  
Если на А2 даже курсор не устанавливается
 
Закомментируйте/удалите строку: 'Range("A1").Select
 
Закоментировал,и ничего.  
Если можно на примере покажите плиз.  
Например, если есть столбец с тремя разніми числами  
 
Сума всего - число (сумма прописью)  
В том числе НДС - число (сумма прописью)  
Сумма без НДС - число (сумма прописью)
 
{quote}{login=}{date=07.09.2012 03:08}{thema=}{post}Закоментировал,и ничего.{/post}{/quote}Что "ничего"? Вы хотели иметь возможность выделять ячейку А2? - так она после указанных действий будет выделяться.
 
{quote}{login=}{date=07.09.2012 03:08}{thema=}{post}Если можно на примере покажите плиз.{/post}{/quote}  
Я бы так сделал.  
(Проверте орфографию, я не могу проверить правильность написания числительных)
 
Когда-то делал для конкретной бухгалтерии. В виде надстройки (для WORDа тоже) с установщиком. Может кому пригодиться.  
 
http://depositfiles.com/files/2gcnzyj9y  
 
ЗЫ Знатоков прошу сильно не глумиться над стилем
 
Михаил, СУПЕР!  
Самая простая СУММА_ПРОПИСЬЮ, что я встречал (у меня их в "копилке" штук 5 разных лежит).  
 
Элементарно просто подпилил её под доллары-центы, а вот под безразмерные целые что-то никак - теряю где-то "тысяч" и всё тут!  
 
А вообще, очень здорово бы подпилить так, чтобы разные единицы измерения во всех их падежах задавались массивами в начале кода. Тогда можно было бы просто задавать единицу измерения в виде аргумента и функция бы получилась универсальной!
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
Алексей, у IgorGo есть его пропись (выкладывал на Программерс), более универсальная и с возможностью указания разных едениц и родов.  
 
Мне же было интересно решить задачу небольшим кодом. А все навороты могут сильно усложнить функцию
 
Самая простая кажется вот:  
 
Function num2text_word(x As Long, Optional Lang As Long = 1049) As String  
'Для турецкого второй аргумент 1055, для английского 1033 и т.д.  
'Русский 1049  
'Если подключить Reference на Microsoft Word Object Library, можно использовать константы ворда wdTurkish, wdEnglishUS и т.д.  
 
With CreateObject("word.document")  
   .Range.LanguageID = Lang  
   .Fields.Add .Range, Type:=-1, Text:="=" & x & " \* cardtext"  
   num2text_word = Replace(.Range.Text, vbCr, "")  
   .Close 0  
End With  
End Function  
 
 
Но без указания десятых долей - хотя это можно обойти, разбив число по разделителям и обработав каждую часть.  
Писать руб. и коп. И Ворд должен присутствовать :)
 
{quote}{login=Hugo}{date=14.09.2012 05:01}{thema=}{post}Самая простая кажется вот:{/post}{/quote}  
Игорь, данный пример уже был на форуме (выкладывал Казанский), но у него есть масса недочетов:  
Нет коппек  
Нужен Word  
Работает очень медленно  
Максимальное число - 999999
 
так еще короче:  
 
Public Function num2text_word(x As Double) As String  
With CreateObject("word.document")  
   .Fields.Add .Range, Type:=-1, Text:="=" & x & " \* cardtext"  
   num2text_word = Replace(.Range.Text, vbCr, "")  
   .Close 0  
End With  
End Function  
 
взято отсюда:  
http://www.planetaexcel.ru/forum.php?thread_id=948&page_forum=2&allnum_forum=64
 
Был где-то да. Не я придумал :) Первоисточник не сохранил.  
Ну а копейки можно добавить - бьём сумму по разделителю, к первому слову прилепляем "руб.", к второму "коп."  
Чтоб не склонять.  
Ворд, предел и медленно - ну у каждого свои недостатки :)  
Но есть и ещё недоработка - нет родов и склонений числительных (например, "две коровы", "двум быкам" написать не получится).
 
{quote}{login=Hugo}{date=14.09.2012 05:28}{thema=}{post}Но есть и ещё недоработка - нет родов и склонений числительных (например, "две коровы", "двум быкам" написать не получится).{/post}{/quote}  
Если кто-то захочет сделать пропись с падежами,  
выкладывал http://www.cyberforum.ru/qbasic/thread586990.html код на QBasic с указанием всех числительных во всех падежах, правда только в мужском роде
 
Привет  
хотелка ... [Здесь был Муля-Gleod]
 
Я давненько сделал проще - взял одну UDF и написал аж 7 разных вариантов, на все случаи жизни - с родами, для денег и вещей, с обработкой нулей и без, со скобками и без :)  
Про падежи не помню, вроде нужно было только в одном падеже - именительном.  
Т.к. у меня в формах уже заранее известо, что считаем и как должно выглядеть - т.е. просто выбираем нужную UDF, ни каких лишних параметров писать не нужно.
Страницы: 1
Читают тему
Наверх