1410

Небольшой макрос для ворда

Пока проходил производственную практику возникла необходимость отредактировать около 300 документов в одной папке. Это были доп. соглашения к ТД, но не суть.

В общем, чтобы не париться, я, путем поиска в гугл, создал небольшую форму с макросом для замены текста во всех файлах word (.docx) в определенной папке.


Выглядит это так:

*ниже приложу ссылку для скачивания*

Путь до папки копируется прямо из проводника:

С пунктами "что заменить" и "на что заменить" я думаю все понятно.

Чекбокс "с задержкой" предназначен для слабых ПК, дабы постоянное открытие и закрытие документов не загружало память. Текстбокс рядом с чекбоксом предназначен для указания задержки в секундах, 3 секунд на самых слабых ПК более, чем достаточно.


Вот как выглядит сам код:


Private Sub CommandButton1_Click()
Dim s As String, fldr As String
fldr = TextBox1.Value & "\"
s = Dir(fldr & "*.doc")
Do While s <> ""
With Documents.Open(fldr & s)
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = TextBox2.Value
.Replacement.Text = TextBox3.Value
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
If CheckBox1.Value = True Then Call idle(TextBox4)
ActiveDocument.Save
.Close
End With
s = Dir
Loop
MsgBox ("Замена завершена!")
End Sub

И код таймера задержки:

Public Sub idle(n As Single)
Dim t As Single
t = Timer + n
DoEvents
Do While Timer < t
Loop
End Sub

Как я уже говорил, части кода взяты с просторов интернета и совмещены в один документ. Вы можете встретить что-то подобное в интернете.


Сделал наглядный пример. Создал несколько документов в папке с текстом:

Заменяем:

После замены:

Документ с макросом вы можете скачать по ссылке: https://yadi.sk/d/58JkrdIXtCTtx

*Работает на версиях MS Office 2010 и 2013. Также необходимо разрешить запуск макросов в настройках безопасности:

Надеюсь, что этот небольшой макрос поможет кому-то сэкономить время и силы при работе с документами :)

Автор поста оценил этот комментарий
Комментарий удален. Причина: данный аккаунт был удалён
раскрыть ветку (1)
6
Автор поста оценил этот комментарий

Ну бывает :)


Думаю найдутся люди, кому реально надо отредактировать много типовых документов, и таким образом можно сэкономить время, не используя дополнительные программы


Тем не менее, как мы видим по соотношению плюсов и минусов, а также по количеству сохранений, кому-то все же это интересно

показать ответы
47
DELETED
Автор поста оценил этот комментарий

Надо еще прикрутить запуск по дате.

Уволили админа несправедливо, бабац, и через три дня, во всей документации конторы наступил лютейший трешь )


*- хотя... проще наверное скриптом повершелла засунуть все в зип под трехэтажным паролем )))))

раскрыть ветку (1)
8
Автор поста оценил этот комментарий

Будет слишком сложно, имхо)

Я делал макрос с оглядкой на людей, которые особо не разбираются в компе, чтобы после завершения практики можно было юзать этот код :)

В Департаменте были 4 девушки/женщины, которые не знают вообще о макросах

показать ответы
8
Автор поста оценил этот комментарий

да, и кстати форму лучше выгружать через Unload formName, а не прятать через Hide

раскрыть ветку (1)
6
Автор поста оценил этот комментарий

Спасибо, поправил:

https://yadi.sk/d/rV3jBL5QtCiN3 - если кому надо

показать ответы
Автор поста оценил этот комментарий

а не проще  в ворде нажать ctrl+h ??

раскрыть ветку (1)
3
Автор поста оценил этот комментарий

У меня в папке было около 250 документов, которые нужно было править. Конечно можно открывать каждый и нажимать ctrl+h, но я решил облегчить себе задачу :)

показать ответы
Автор поста оценил этот комментарий

Ну кто так оформляет код?!

раскрыть ветку (1)
3
Автор поста оценил этот комментарий

Да вроде нормально выглядит, даже пояснения сделал :(

Иллюстрация к комментарию
показать ответы
8
DELETED
Автор поста оценил этот комментарий

Так вы про помочь, а я про нагадить :) Это мне в пору извиняться.

А вообще, автоматизация это круто! Может ну его нафиг, тот менеджмент? Очень мало людей сейчас, хотя бы интересуются возможностями автоматизации. Не говоря о том, чтобы делать.

раскрыть ветку (1)
3
Автор поста оценил этот комментарий

Ах вот оно что) я даже не понял)

За 3 года обучения уже много раз приходила мысль "Может ну его нафиг, тот менеджмент?", но как-то жаль 3 курса обучения, год всего остался до диплома. Хотя мозги вроде позволяют стать хорошим менеджером

показать ответы
8
DELETED
Автор поста оценил этот комментарий

Дык четыре строчки в скрипте, один ярлычок и одна задача в планировщике задач ;)


Да вот, к примеру - http://stackoverflow.com/questions/1153126/how-to-create-a-z...  


>_< 

раскрыть ветку (1)
5
Автор поста оценил этот комментарий

Не знал, извиняюсь)

Я также далек от этой темы, учусь на менеджера, просто был интересен вопрос автоматизации

показать ответы
3
Автор поста оценил этот комментарий

А самое главное нужно побольше таких менеджеров, которые не стесняются что-то поискать и что-то сделать. Основная масса думает что это всё работа админа (компьютерщика), и даже не это а куда проще, изменить шрифт, создать таблицу. часто до идиотизма доходит. Типа
"- Чувааааак, почини мне стол!
- АйТи этим не занимается.
- Но он же компьюуууутерный!"


Это я вам как админ говорю.


У меня был случай когда секретарша пыталась напрячь меня текст набрать, только потому что я это сделаю быстрее...

А так БРАВО таким менеджерам!!!

раскрыть ветку (1)
2
Автор поста оценил этот комментарий

"ой ну прекрати"


А вообще, судя по моим одногрупникам, я скорее исключение, из 14 человек 10 вообще бы не догадались о возможной автоматизации и вручную редактировали каждый документ (ну или обратились бы к АйТи :) )

Проходил практику вместе с одногрупником, он вручную хотел начать это делать

1
Автор поста оценил этот комментарий

на libre, open или google пересесть невозможно просто в силу их неполной совместимости с монополистом, MS

т.е. при конвертации постоянно корраптятся какие-то мелкие моменты типа отступов, полей и т.д.


и гарантировать, что секретарша контраргента на своём Office 97 откроет и увидит то, что видишь ты, становится невозможно

раскрыть ветку (1)
2
Автор поста оценил этот комментарий
В организации, где практиковался, очень сторого с безопасностью, из инструментов были только офис и пдф-редактор собственное разработки или выполненный на заказ, ну и стандартные средства винды.
Интернет по белым списком, чтобы добавить сайт в белый список - запрос в СБ.
Так что ни о каких иных программах, кроме ворда, тогда не шло речи
1
Автор поста оценил этот комментарий

Не знаю, насколько это применимо к файлам *.docx, но для экономии памяти компьютера можно исправлять данные (по крайней мере .xlsx), не открывая их напрямую, что на порядок сокращает время работы программы при работе с большим количеством файлов.

раскрыть ветку (1)
2
Автор поста оценил этот комментарий

Насколько я знаю, они хранятся в виде xml-таблиц, поэтому возможно такое редактирование. Вот насчет ворда, не думаю, что такое возможно

показать ответы
1
Автор поста оценил этот комментарий

Всё-таки это очень рисково менять набор символов, на другой, фиг знает что там может попасться, данное решение - только если на 100% уверен в уникальности текста (ну типа название продукта на аналогичный).

раскрыть ветку (1)
2
Автор поста оценил этот комментарий

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

0
Автор поста оценил этот комментарий

Хм, ну может, но ты ж потом проверил те документы? или надеешься что никаких глюков не было?

раскрыть ветку (1)
2
Автор поста оценил этот комментарий

Естественно проверил, все-таки официальная документация, все было ок :)

5
Автор поста оценил этот комментарий

1) Documents.Open возвращает документ. Поэтому вместо ActiveDocument.Save лучше просто .Save, т.к. в случае всяких косяков активным может стать другой документ.

2) вместо задержек можно использовать Application.ScreenUpdating = False в начале кода и True в конце, а для индикации сделать маленький прогрессбар

3) В дополнение к п.1: не хватает проверок на корректность: Documents.Open может не сработать ( например, если есть пароль или нет файла по этому пути) и либо вылетит в ошибку, либо вернет Nothing. Для таких целей я писал класс Wrapper, с ним открытие, создание и закрытие попроще будет.


Но это для большей универсальности всё, для частных целей ок ))

раскрыть ветку (1)
3
Автор поста оценил этот комментарий
Первый пункт приму на вооружение, благодарю)
Второй уже подсказали в комментах, там сделал исправленную версию, но все равно спасибо
Насчет третьего: у меня на ~250 документов ошибок не было, запароленных документов не было, т.к. они все типовые, но в след раз, если будет нужно, воспользуюсь советом, спасибо :)
5
Автор поста оценил этот комментарий

Сколько времени на изучении VBA мне придется потратить, чтобы самому написать подобный макрос? По работе периодически необходимо подобные операции делать.

раскрыть ветку (1)
2
Автор поста оценил этот комментарий
Я отталкивался от задачи: отредактировать большое количество документов. Гуглил соответствующие темы и по кусочуам собирал подходящие коды, около 4 часов за два дня потратил на это, большую часть времени в гугле
2
DELETED
Автор поста оценил этот комментарий
У него производственная практика. Скоро закончится и он свалит от туда.
раскрыть ветку (1)
1
Автор поста оценил этот комментарий
Уже закончилась)
Автор поста оценил этот комментарий
Слияние документов: шаблон в ворде, тексты для подстановки - в Excel. Пользуюсь этим вариантом.
раскрыть ветку (1)
1
Автор поста оценил этот комментарий
Не получилось бы в моем случае, т.к. у разных сотрудников может отличатьсясоглашение, у кого-то нет определенных пунктов, у других эти пункты другие и т.д.
0
Автор поста оценил этот комментарий
Вопрос как вводить специальные символы вроде абзацев, разрывов и т д
раскрыть ветку (1)
1
Автор поста оценил этот комментарий
К сожалению, вводить их напрямую в форму не получится, так что либо укорачивать текст, либо использоватт основу кода и записать свой макрос, с помощьую записи макросов, потом скопировать код из формы и создать таким образом третий макрос :)
Автор поста оценил этот комментарий

интересно конечно как автор отредактировал множество файлов типа: word (*.docx), кодом который эти файлы будет просто напросто игнорировать все.

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Почему будет игнорировать? У меня все работало

2
Автор поста оценил этот комментарий

как хорошо, что notepad++ умеет это всё стоково)

особенно мне нравится там запись макросов вживую с последующим воспроизведением

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Запись макросов есть и в офисе. Тут дело в том, что надо было исправить около 250 документов, и запись макросов слабо поможет в этом деле.

показать ответы
Автор поста оценил этот комментарий

PS Не понимаю как работает счетчик "s".

s=*.doc


делать пока s<>пустому месту.



но почему s меняется, если * - означает любые символы. Теоретически, оно должно бесконечно открывать один и тот же файл

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Я сам полностью не разобрался в этом, взял часть кода из какого-то макроса для excel на форуме, переделал под ворд, главное работает)

0
Автор поста оценил этот комментарий

Не, ну тут порядок.

Я про отступы в посте

Иллюстрация к комментарию
раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Копировал и вставил из vba, редактор постов сам так отформатировал, а поправлять лень, извиняюсь :)

0
Автор поста оценил этот комментарий

Привет из 2018! у тебя остался макрос на замену значений в ворде?

раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Привет! К сожалению, уже несколько компов поменял, ничего не сохранилось
0
Автор поста оценил этот комментарий

Псст, привет!
У тебя сохранились исходники? Ссылки битые, а поглядеть интересно :с

раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Привет! К сожалению, уже нет, недавно чистил яндекс диск, места не хватало. Исходников нет, к сожалению, только если по скринам восстанавливать
показать ответы
0
Автор поста оценил этот комментарий
Чет не понял прикола)
В ворде есть стандартный инструмент по замене слов во всем тексте)
раскрыть ветку (1)
0
Автор поста оценил этот комментарий
возникла необходимость отредактировать около 300 документов в одной папке
0
Автор поста оценил этот комментарий

А может кто сделать подобное для ексель или там тот же макрос можно использовать?

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Попробуй заменить строчку s = Dir(fldr & "*.doc") на s = Dir(fldr & "*.xlsx")

Думаю, должно работать

показать ответы
3
Автор поста оценил этот комментарий
Спросить

и?

и кинуть в игнор-лист - бесценно

Иллюстрация к комментарию
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Да просто троль, не обращай внимания)

показать ответы
0
Автор поста оценил этот комментарий

небольшая опечатка и всё в труху XD зашибись

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Ну даже если сделал опечатку, просто заменяешь таким же образом текст с опечаткой на правильный

показать ответы
1
Автор поста оценил этот комментарий

'... Call idle(TextBox4)'

Думаю должно быть TextBox4.Value. Хотя приведение типа к Single при вызове функции возможно само вызывает геттер.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Да, по умолчанию берет именно значение текстбокса

1
Автор поста оценил этот комментарий

Сори, проглядел :)

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Бывает )

1
Автор поста оценил этот комментарий

Привет, а не проще было сразу готовое решение найти? Вот быстрое гугление куда ведет: http://chris-nullpayload.rhcloud.com/2012/07/find-and-replac...

(там на power shell, но вроде должно работать)

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Так это макрос, или скрипт?

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Макрос

1
Автор поста оценил этот комментарий
Интересен вопрос автоматизации? Юзай AutoIT. Убер-мощная штука. Есть минусы, конечно (многопоточности нет) но в целом инструмент лютый. Макросы для Word и Excel пишу только на нем. С хорошим GUI и т.п.
Иллюстрация к комментарию
Иллюстрация к комментарию
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Для собственного использования крутая вещь

А так - #comment_68928491

4
Автор поста оценил этот комментарий

Рядом с вводом имени папки есть смысл разместить кнопочку, которая будет выбор папки делать. Код для примера:

Function GetDirectory()

  With Application.FileDialog(msoFileDialogFolderPicker)

    .Title = "Выберите папку с файлами для замены"

    .ButtonName = "Выбрать"

    .Show

    If .SelectedItems.Count > 0 Then

      GetDirectory = .SelectedItems(1)

    Else

      GetDirectory = Application.Path

    End If

    End With

End Function

раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Спасибо, учту :)
0
Автор поста оценил этот комментарий

а есть возможность создать макрос, чтобы печатал все страницы, кроме некоторых в документе? диапазоном очень неудобно задавать.

раскрыть ветку (1)
Автор поста оценил этот комментарий
Точно не знаю, но если есть возможрость распечатать так стандартным образом, через меню, то точно можно сделать через макрос. Сейчас не имею доступа к компу, так что не могу проверить
0
Автор поста оценил этот комментарий

У нас в инсте (мы заочники еще и на СДО) приехали на сессию НА 9 дней, и было 5 лоботокарных по информатике. И за одну лабораторную нас пытались научить это сделать! Большинство справились но уже доделывая дома ))  

раскрыть ветку (1)
Автор поста оценил этот комментарий

В первый день пытался на месте это реализовать, но не получилось. Догугливал дома :)

2
Автор поста оценил этот комментарий

когда-то понадобилось отправить на печать только первую титульную страницу в 100+ документах

https://1drv.ms/u/s!AnTy4WPaWM0UguIhmrfp2KMfvstWQA

раскрыть ветку (1)
Автор поста оценил этот комментарий

Неплохо, я тогда код в посте использовал еще для печати, меняя процесс замены на печать, только форму не создавал.

Если кому надо, могу сделать похожую форму, с указанием номеров страниц и количеством копий :)

показать ответы

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества