powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Сумма прописью в MS Word
11 сообщений из 11, страница 1 из 1
Сумма прописью в MS Word
    #38576238
Ghost Writer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поделитесь, пожалуйста, рабочей функцией для 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
Сумма прописью в MS Word
    #38576243
Казанский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1) решается статической переменной - COM-объект создается 1 раз и живет, пока модуль находится в памяти.
2) в каком виде Вы хотите дробную часть?

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

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

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

КазанскийЕсть еще ограничение: макс. число для cardtext 999999.Вообще не понятно, вроде как ограничения касаются до 97 офиса включительно http://support.microsoft.com/kb/35596/en-us#appliesto ,
но код в первом посте игнорирует дробную часть. Может из-за точки вместо с запятой, но с запятой вообще Компиль эррор.
...
Рейтинг: 0 / 0
Сумма прописью в MS Word
    #38576248
Ghost Writer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ghost WriterКазанский2) в каком виде Вы хотите дробную часть?два знака после запятой.может я не понял вопрос, перефразирую. есть суммы с двумя знаками после запятой (копейки), например, 99,99. надо преобразовать в пропись, т.е. девяносто девять рублей девяносто девять копеек
...
Рейтинг: 0 / 0
Сумма прописью в MS Word
    #38576292
Михаил Ч.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Писал как то пропись для 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
Сумма прописью в MS Word
    #38576298
Ghost Writer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Огромное спасибо, добрый человек! :)
Удивительно какой короткий алгоритм. Посмотрел около двух десятков портянок на делфи, все в 4-5 раз длиннее так и не смог выбрать какой попытаться перевести
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Сумма прописью в MS Word
    #38920530
5565
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Михаил Ч.,

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

Здравствуйте, Михаил.
Ваш макрос суммы прописью самый лучший.
Не могли бы вы рассказать, как его использовать для поля слияния в Word?
Поясню. Из запроса Access выгружаются поля слияния в Word. Одно из полей имеет значение суммы с НДС. Нужно, чтобы рядом сумма из этого поля писалась прописью. Если использовать макрос в запросе Access, то там все работает прекрасно, но тогда запрос становится недоступным для слияния. Поэтому пришлось удалить из запроса поле с выражением, в котором используется ваш чудесный макрос. А что делать, чтобы применить ваш макрос в Word именно к полю слияния [Сумма_с_НДС], я не знаю. Помогите, пожалуйста. В интернете есть похожие вопросы, но нет ни одного ответа.
Заранее спасибо.
...
Рейтинг: 0 / 0
Сумма прописью в MS Word
    #39697996
stepochka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
11 сообщений из 11, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Сумма прописью в MS Word
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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