Гость
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Сумма прописью в MS Word / 11 сообщений из 11, страница 1 из 1
02.03.2014, 01:26
    #38576238
Ghost Writer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма прописью в MS Word
Поделитесь, пожалуйста, рабочей функцией для MS WORD, которая форматирует суммы в рублях прописью.
Нагугливаются только для Excell а также распространенный способ с cardtext, например такой: 13328380
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Dim x As Long
x = 1100.55 ' добавил десятичное значение,... бессмысленно :(
Dim lang As Long
'1049 - русский язык
lang = 1049

With CreateObject("word.document")
    .Range.LanguageID = lang
    .Fields.Add .Range, Type:=-1, Text:="=" & x & " \* cardtext"
    Dim num_text_word As String
    num_text_word = Replace(.Range.Text, vbCr, "")
    .Close 0
End With


Данной способ мне не нравится по ряду причин:
1) при каждом вызове создавать COM-объект не очень эффективно, у меня функция будет выполняться очень часто, так сказать пакетная обработка.
2) десятичные части cardtext не берет, т.е. действует ограничение http://support.microsoft.com/kb/35596/en-us
Код: plaintext
Rounded to the nearest number. Cardtext cannot express decimals.
3) мне необходимо еще указывать денежную единицу (рубли) в соответствующем склонении. хотя может это решаемо
...
Рейтинг: 0 / 0
02.03.2014, 02:07
    #38576243
Казанский
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма прописью в MS Word
1) решается статической переменной - COM-объект создается 1 раз и живет, пока модуль находится в памяти.
2) в каком виде Вы хотите дробную часть?

Есть еще ограничение: макс. число для cardtext 999999.

А как Вы вообще собираетесь использовать эту функцию? Насколько я помню, использовать UDF в вычисляемых полях Ворда нельзя.
Если в VBA, то без разницы, для чего она написана - Excel или Word. Если, конечно, не используются функции листа Excel (т.е. методы объекта Excel.Application).
...
Рейтинг: 0 / 0
02.03.2014, 02:19
    #38576244
Ghost Writer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма прописью в MS Word
Казанский,

Да, VBA. Я как-то пробовал несколько готовых функций для Excel, но не удалось запустить, дебагер постоянно ругался. Они объявлены даже были не так как в ворде. пытался править но то одно, то другое.. нервы не выдержали
...
Рейтинг: 0 / 0
02.03.2014, 02:29
    #38576246
Ghost Writer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма прописью в MS Word
Казанский2) в каком виде Вы хотите дробную часть?два знака после запятой.

КазанскийЕсть еще ограничение: макс. число для cardtext 999999.Вообще не понятно, вроде как ограничения касаются до 97 офиса включительно http://support.microsoft.com/kb/35596/en-us#appliesto ,
но код в первом посте игнорирует дробную часть. Может из-за точки вместо с запятой, но с запятой вообще Компиль эррор.
...
Рейтинг: 0 / 0
02.03.2014, 02:36
    #38576248
Ghost Writer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма прописью в MS Word
Ghost WriterКазанский2) в каком виде Вы хотите дробную часть?два знака после запятой.может я не понял вопрос, перефразирую. есть суммы с двумя знаками после запятой (копейки), например, 99,99. надо преобразовать в пропись, т.е. девяносто девять рублей девяносто девять копеек
...
Рейтинг: 0 / 0
02.03.2014, 12:37
    #38576292
Михаил Ч.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма прописью в MS Word
Писал как то пропись для Excel http://www.excelworld.ru/forum/3-3521-1
В ней не используются объекты и функции Excel, поэтому может использоваться в Word:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Function MSumProp$(chislo#) 'Автор MCH (Михаил Ч.), май 2012
Dim rub$, kop$, ed, des, sot, nadc, razr, i&, m$
If chislo >= 1E+15 Or chislo < 0 Then Exit Function

sot = Array("", "сто ", "двести ", "триста ", "четыреста ", "пятьсот ", "шестьсот ", "семьсот ", "восемьсот ", "девятьсот ")
des = Array("", "", "двадцать ", "тридцать ", "сорок ", "пятьдесят ", "шестьдесят ", "семьдесят ", "восемьдесят ", "девяносто ")
nadc = Array("десять ", "одиннадцать ", "двенадцать ", "тринадцать ", "четырнадцать ", "пятнадцать ", "шестнадцать ", "семнадцать ", "восемнадцать ", "девятнадцать ")
ed = Array("", "один ", "два ", "три ", "четыре ", "пять ", "шесть ", "семь ", "восемь ", "девять ", "", "одна ", "две ")
razr = Array("триллион ", "триллиона ", "триллионов ", "миллиард ", "миллиарда ", "миллиардов ", "миллион ", "миллиона ", "миллионов ", "тысяча ", "тысячи ", "тысяч ", "рубль ", "рубля ", "рублей ")

rub = Left(Format(chislo, "000000000000000.00"), 15)
kop = Right(Format(chislo, "0.00"), 2)

If CDbl(rub) = 0 Then m = "ноль "
For i = 1 To Len(rub) Step 3
    If Mid(rub, i, 3) <> "000" Or i = Len(rub) - 2 Then
        m = m & sot(CInt(Mid(rub, i, 1))) & IIf(Mid(rub, i + 1, 1) = "1", nadc(CInt(Mid(rub, i + 2, 1))), _
                des(CInt(Mid(rub, i + 1, 1))) & ed(CInt(Mid(rub, i + 2, 1)) + IIf(i = Len(rub) - 5 And CInt(Mid(rub, i + 2, 1)) < 3, 10, 0))) & _
                IIf(Mid(rub, i + 1, 1) = "1" Or (Mid(rub, i + 2, 1) + 9) Mod 10 >= 4, razr(i + 1), IIf(Mid(rub, i + 2, 1) = "1", razr(i - 1), razr(i)))
    End If
Next i
MSumProp = UCase(Left(m, 1)) & Mid(m, 2) & kop & " копе" & IIf(kop \ 10 = 1 Or ((kop + 9) Mod 10) >= 4, "ек", IIf(kop Mod 10 = 1, "йка", "йки"))
End Function



99,99 = Девяносто девять рублей 99 копеек
99,99 =
...
Рейтинг: 0 / 0
02.03.2014, 13:42
    #38576298
Ghost Writer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма прописью в MS Word
Огромное спасибо, добрый человек! :)
Удивительно какой короткий алгоритм. Посмотрел около двух десятков портянок на делфи, все в 4-5 раз длиннее так и не смог выбрать какой попытаться перевести
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
29.03.2015, 21:18
    #38920530
5565
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма прописью в MS Word
Михаил Ч.,

а что дальше то делать, чтобы в ворде заработало? )
объясните не имеющему представления о VBA
...
Рейтинг: 0 / 0
15.05.2015, 14:02
    #38959825
Tut23
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма прописью в MS Word
Тот же вопрос от предыдущего оратора. С эксом всё понятно, нос вордом...
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
02.09.2018, 22:14
    #39696919
Nat_S77
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма прописью в MS Word
Михаил Ч.,

Здравствуйте, Михаил.
Ваш макрос суммы прописью самый лучший.
Не могли бы вы рассказать, как его использовать для поля слияния в Word?
Поясню. Из запроса Access выгружаются поля слияния в Word. Одно из полей имеет значение суммы с НДС. Нужно, чтобы рядом сумма из этого поля писалась прописью. Если использовать макрос в запросе Access, то там все работает прекрасно, но тогда запрос становится недоступным для слияния. Поэтому пришлось удалить из запроса поле с выражением, в котором используется ваш чудесный макрос. А что делать, чтобы применить ваш макрос в Word именно к полю слияния [Сумма_с_НДС], я не знаю. Помогите, пожалуйста. В интернете есть похожие вопросы, но нет ни одного ответа.
Заранее спасибо.
...
Рейтинг: 0 / 0
04.09.2018, 17:57
    #39697996
stepochka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма прописью в MS Word
Nat_S77, посмотрите в сторону использования поля DOCVARIABLE

несложный макрос поможет связать переменную SumProp, например, со значением функции сумма прописью по значению поля слияния.
вот где то в интернетах было найдено для примера

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Public Sub SetVariable()

  Const MYVAR As String = "SumProp"

  Dim var As Variable

  On Error Resume Next
  Set var = ActiveDocument.Variables(MYVAR)
  ActiveDocument.Variables(MYVAR).Delete
  On Error GoTo 0

  If var Is Nothing Then
    Set var = ActiveDocument.Variables.Add(MYVAR)
  End If
 ActiveDocument.Variables.Add Name:=MYVAR, Value:=MSumProp$(ActiveDocument.Fields(1).Result)
 ActiveDocument.Fields.Update

End Sub
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Сумма прописью в MS Word / 11 сообщений из 11, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]