Word VBA Макросы: Замена полей и элементов управления на значения при сохранении

Автор Евгений Второй, 25 декабря 2017, 12:54

Евгений Второй

Внизу шаблона (файл "dotm") две формы: одна с автоматической установкой даты (поле "TIME"), вторая с выпадающим списком (элемент управления содержимым "поле со списком") фамилий.
Можно ли добавить в макрос параметр, чтобы документ сохранялся с фиксированной датой: открыл шаблон, при заполнении его текущая дата установилась автоматически, при сохранении файла в docx, чтобы она становилась статической и не изменялась при следующем открытии этого файла.
То же и с формой "спец": чтобы сохранялась выбранная фамилия и форма блокировалась - выпадающий список превращался просто в текст.

В шаблоне может быть несколько элементов управления содержимым.

Возможно ли это?

[вложение удалено администратором]

Администратор

Чтобы запускался макрос, когда юзер щёлкает "Сохранить", используется событие "Application.DocumentBeforeSave".
Чтобы запускать это событие, нужно создать модуль класса (в данном случае "EVENTS").
Чтобы событие начало работать, сделан код в модуле файла (ThisDocument).
После того, как юзер создаст файл на основе шаблоне, юзеру надо разрешить макросы, чтобы всё начало работать. То есть если под лентой появится жёлтая панель с кнопкой для разрешения макросов, юзер должен щёлкнуть эту кнопку.

Макросы в созданном файле запускаются, хотя самих макросов в файле нет, т.к. устанавливается связь между созданным файлом и шаблоном. Это видно в VBA (в области с модулями есть "Reference to"). И это видно здесь: вкладка "Разработчик" (по умолчанию её нет, юзер должен сам отобразить) - группа "Надстройки" - Надстройки Word - вкладка "Шаблоны" - Шаблон документа.

PS. На самом деле форм в файле у вас нет, просто это вы так называете "форма". Это для других участников форума, чтобы не вводить их в заблуждение.

[вложение удалено администратором]

Евгений Второй

Всё работает с тем шаблоном, который я выложил.
Но на реальном шаблоне перестаёт работать.

Администратор

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

Евгений Второй

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

Администратор

Функциональный макрос (который делает ваше задание) находится здесь: BEFORE_SAVE.Main.
Я так понимаю, что у вас в реальном файле по-другому расположены таблицы.
В комментариях указано, с какими таблицами работает макрос. Вам надо заменить порядковые номера на новые. Сейчас макрос работает с таблицами 4 и 5. Вам наверное нужно заменить 4 и 5 на другие порядковые номера таблиц.

Администратор

Само решение состоит из трёх модулей:
ThisDocument
EVENTS
BEFORE_SAVE

Модули "EVENTS" и "BEFORE_SAVE" вам надо просто скопировать в другой шаблон.
И надо ещё скопировать код из модуля "ThisDocument".


Евгений Второй

Всё получилось, для пробы сделал пару шаблонов, всё работает как надо. Мне надо пальцем показывать. Намёков не понимаю.

Администратор

Просто я не знаю ваш уровень, поэтому я сразу не описывал подробно.
Если что, то задавайте вопросы. Форум как раз и создан для простых и небольших вопросов.