Наш сегодняшний материал посвящается всем сотрудникам плановых и договорных отделов :)
Когда заключается новый договор, который написан в Word, в которых фигурирует сумма, хочется что бы минимальными действиями (!) у нас сумма из цифр превращалась в сумму прописью.
И было бы замечательно , если бы она автоматически считала НДС и вписывала это значение тоже прописью.
На данный момент самый простой способ, это открыть любой онлайн сервис (типа сумма-прописью или наш ресурс выделение НДС) вписать туда сумму, скопировать оттуда результат и вставить его Word.
Попробуем упростить работу сотрудниц и сотрудников, что бы этот же результат получался по нажатию одной клавиши.
Мы будем использовать уже написанный скрипт Дата (день, месяц, год) прописью, который модернизирован для вывода денежных единиц, а также использовать материал, который позволял нам обмениваться данными из Active Directory и Excel Карточка сотрудника Active Directory через Excel
Итак что же нам необходимо сделать?
1. Открываем Word. Идем во вкладку Вид- Макросы
Даже если у нас нет ни одного макроса нажимаем кнопку - Изменить

Открывается редактор VBA
создаем макрос
Sub Макрос1()
Selection.MoveStartUntil Cset:=" ", Count:=wdBackward
Selection.MoveEndUntil Cset:=" ", Count:=wdForward
body = Selection
Set oHttp = CreateObject("MSXML2.ServerXMLHTTP")
sURL = "http://jabber.pozitiv-r.ru/scripts/reqexcel.php"
oHttp.Open "POST", sURL, False
oHttp.setrequestheader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
oHttp.setrequestheader "Content-Type", "application/x-www-form-urlencoded"
oHttp.send ("from=www&key=towo&body=" + Format(body, "###0.00") + "!3")
Result = oHttp.ResponseText
Dim jsonlib As New jsonlib 'class name you give it
Set oContracts = jsonlib.parse(CStr(Result))
ff = oContracts("result")
oHttp.Open "POST", sURL, False
oHttp.setrequestheader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
oHttp.setrequestheader "Content-Type", "application/x-www-form-urlencoded"
nds = Val(body) * 18 / 118
oHttp.send ("from=www&key=towo&body=" + (Format(nds, "###0.00")) + "!3")
Result = oHttp.ResponseText
Set oContracts = jsonlib.parse(CStr(Result))
ff1 = oContracts("result")
Selection.Collapse Direction:=wdCollapseEnd
Selection.TypeText Text:=" руб. (" + ff + ") в том числе НДС(18%) " + Format(nds, "###0.00") + " руб. (" + ff1 + ")"
End Sub
Присоединяем библиотеку jsonlib у вас после всех движений в левой верхней части должно быть подобие вот этой картинки

Что означает подчеркнутое слово Normal? Это говорит нам о том что и класс и макрос записаны в стандартном шаблоне Word Normal.dot(m). То есть при открытии любого файла а также содания нового на этом рабочем месте этот класс и макрос будут загружены автоматически.
Теперь нам надо присвоить какое нибудь сочетание клавиш что бы этот макрос запустить.
Для этого в Word. (показано действие для 2010 офиса)
Файл-Параметры-Настройка ленты -(внизу) Сочетания клавиш- Настройка
Выбираем категорию макросы. В правом поле выбираем наш макрос,
Новое сочетание клавиш - F9. Назначить
Почему F9? Вы сами можете переназанчить горячую клавишу по вызову макроса.
Все , у нас готовый шаблон которым мы можем пользоватся
Пишем Сумма договора составляет 23456.94
мы или сразу нажимаем F9 после набора суммы, или просто курсором отмечаем число которое надо преобразовать и нажимаем F9, это не важно.
результат будет такой
Сумма договора составляет 23456.94 руб. (двадцать три тысячи четыреста пятьдесят шесть рублей девяносто четыре копейки ) в том числе НДС(18%) 3578.18 руб. (три тысячи пятьсот семьдесят восемь рублей восемнадцать копеек )
Несмотря на то, что мы достаточно много поработали что бы написать макрос, но с учетом того, что теперь мы но нажатию одной клавиши вписывем то, на что тратили как минимум в два раза больше времени, можно сказать что оптимизация работы планового и договорного отдела удалась.
А как считать если у нас НДС не 18% а 10%?
Исправьте только две строки
nds = Val(body) * 18 / 118
замените на nds = Val(body) * 10 / 110
и
Selection.TypeText Text:=" руб. (" + ff + ") в том числе НДС(18%) " + Format(nds, "###0.00") + " руб. (" + ff1 + ")"
на Selection.TypeText Text:=" руб. (" + ff + ") в том числе НДС(10%) " + Format(nds, "###0.00") + " руб. (" + ff1 + ")"
Как можете заметить Selection.TypeText Text - отвечает за вывод текста и что вы уж там напишите, ограничена лишь вашей фантазией.
Если у вас есть какие то вопросы замечания или нужна помощь , то обращатесь.
Удачных расчетов!