Destio

Visual Basic

Как передать документ Word в функцию или подпрограмму

Передача аргументов в подпрограмму (subroutine) или функцию в VBA немного сложнее чем обычно, поэтому чтобы передать открытый документ на обработку в подпрограмму, можно писать вот так: Sub setDoi(activeFile As Document, articleNumber) … End Sub Dim oDoc As Document fileCount = 1 Call setDoi(oDoc, fileCount) Можно вызывать функцию и без Call, особенно если ей нужно вернуть […]

Читать дальше

, ,

Перевод RGB в Long, цвета в VBA

VBA любит использовать значения цвета в формате Long. Для этого у него есть функция RGB(), которая возвращает Long из заданного цвета. Проблема в том что у VBA есть странные ограничения, например он не может использовать функции при задании констант или, еще хуже, менять значения переменных вне подпрограмм. Поэтому иногда хорошо бы задать цвет напрямую. Вот […]

Читать дальше

Ошибка 5560, VBA

Если у .Find объекта задано свойство .MatchWildcards = True, то если Ворд не сможет понять заданное регулярное выражение, то он выдаст следующую ошибку: Run-time error 5560: Поле «Найти» содержит неверный шаблон поиска. Несколько сложнее то что у объекта «Найти и заменить» в Microsoft Word есть некоторые специфические заморочки: При задании числа встреченных значений, рекомендуемая в […]

Читать дальше

,

Как найти и выделить все вхождения текста, VBA (Word)

Окошко «Найти и заменить» в Microsoft Word может мазать все найденное желтеньким, но это не имеет отношения к выделению текста (и VBA может). А если искать с выделением (Selection.Find), то нахождение каждого следующего вхождения снимает выделение с предыдущего. Поэтому для простаты надо искать в цикле (Do While True в самый раз). Вот пример куска кода, […]

Читать дальше

, ,

Как дописать текст в конец DOCX файла, VBA

Следующий небольшой кусок кода дописывает textToTheEnd в конец файла и применяет к нему стиль L-text-normal, если такой есть в этом документе. Если нет, макрос вылетит с ошибкой, хехе. Я не помню зачем надо было сдвигать все на 1 символ вперед и как в результате будут расставлены переносы строк и абзацев. Наверное надо будет потестить. Set […]

Читать дальше

, , , ,

«Слишком длинный строковый параметр», VBA

Сидел я крутил какие-то документы с макросами и обычный, вполне работающий макрос выпал с ошибкой: Run-time error ‘5854’: Слишком длинный строковый параметр Вот срань, оказывается свойство объекта FindReplace .Find.Replacement.Text в VBA не может принимать параметры длиной больше 255 символов (привет, 70-е). А в автозаменах довольно легко упереться в эту крохотную границу. Странно, но параметр .Execute […]

Читать дальше

,

Массивы в VBA

VBA это Visual Basic for Applications, давно мертвая версия бейсика, однако работает для макросов Microsoft Word, например. Наверное большая часть этой херни так или иначе работает и в последующих реинкарнациях бейсика, что я узнаю, если придется все это портировать. Чтобы массивы работали, их надо сначала определить, задать размер и тип элементов. Вот, зададим массив на […]

Читать дальше

,

Автоматическая нумерация страниц в Microsoft Word

Раньше я пользовался более окольным методом автоматической нумерации страниц, но вот дошли руки состряпать решение поаккуратнее. Нижеприведенный макрос сам сосчитает и вставит номера страниц сразу во все DOC и DOCX файлы (в алфавитном порядке), найденные в рабочей папке (например c:\test\ ). Конечно, для этого в колонтитуле уже должны быть указаны номера, а макрос просто установит […]

Читать дальше

, , ,

Установка номера страниц через макросы в Word

Со времени написания этого сообщения я обзавелся более продвинутым способом нумерации, а этот пусть лежит для истории. Что надо сделать? Проставить страницы у пачки .doc и docx файлов. Что уже сделано для этого? В каждом файле уже есть колонтитулы с номерами страниц, просто каждый начинается с 1 страницы. Сами номера страниц заботливо сосчитаны кривеньким перл-скриптом […]

Читать дальше

, , ,