Создание шаблона с макросом

Статус
В этой теме нельзя размещать новые ответы.

Ренат

Продвинутый
Доброго дня. Есть Многопользовательский Проект (пока сидим на 5 версии Руны, но "руки дойдут" перейдём на 6-ю).
Задача: Шаблон Word документа вначале имеет адресную часть выполненную в форме таблицы (2 столбца, 10 строк итого 12 ячеек). Ячейки первого столбца - заполнены текстом. Текст ячеек второго столбца берет свое значение из данных Проекта (значение Полей Проекта). В зависимости от ситуации (Записи Проекта) значения строк второго столбца - могут отсутствовать (например: в шаблон выгружаются значения только 5 строк из 10). Соответственно нижние (не заполненные строки) - надо удалить.
Способ реализации: запись макроса на удаление строк таблицы.
Я "нифига не программист" поэтому макрос записывается через функцию Wordа - запись последовательности действий (код не знаю как написать).
Уточняющие вопросы:
1. Правильно ли я понимаю, что Макрос записывается и соответственно применяется для конкретного шаблона с поддержкой макроса (т.е. макрос прописанный для Шаблона 1 не может быть применен для Шаблона 2. Для Шаблона 2 надо записывать свой макрос)?
2. Возможно ли для одного и того же шаблона написать несколько макросов, естественно с разными действиями (согласно Справке по базе макросу присваивается имя runa. При попытке записать название макроса "runa удаление", ворд ругнулся на "иностранном языке" и ничего не записалось. Что делать (какое имя присвоить макросу), если я хочу для одного шаблона записать несколько макросов?
3. Будет ли написанный мной макрос автоматически применяться у иных пользователей Проектом, т.е. подгрузится ли соответствующий макрос с Шаблоном в машину иного пользователя этим Проектом, при подключении к проекту?

(я понимаю что последующие вопросы не совсем по Базе, но вы же программисты...)
4. Word предлагает два варианта применения Макроса: 1. добавление кнопки на панель быстрого доступа; 2. назначение сочетания клавиш. Возникают вопросы:
Устанавливая в шаблоне кнопку Макроса в панели быстрого доступа или сочетание клавиш применения Макроса - эти же настройки установятся в Wordах иных пользователей при многопользовательском режиме (при подключении к проекту иных пользователей) или мне надо делать настройки в их Wordах?
5. Возможно ли сделать визуальную кнопку соответствующего Макроса в ленте word (не быстрая клавиша, а какая-нибудь дополнительная) (прошу не "бить" если вопрос глупый)?
6. Возможно ли настроить Базу таким образом, чтобы Макрос применялся автоматически при создании документа (например: В Шаблоне 5 получателей (соответственно и поскольку Шаблон содержит 10 строк - 5 из них заполнены не будут), в Базе устанавливаю количество получателей 5 (тут "отсылка" к 6-й версии Руны, лишние поля скрываются). Назначается Расчётное поле количество применения макроса (10 - 5 = значение 5). При формировании текстового документа Word автоматически применяет удаление лишних строк 5 раз (при текущих настройках пользователь применяет макрос 5 раз нажимая на кнопку либо сочетание клавиш)?
7. Как посмотреть код Макроса (то есть я его записал так сказать "визуально", но сам Word записал действия в форме Кода) и на каком языке программирования записывается этот код Макроса (что мне почитать, чтобы научиться понимать эту кодировку). Если скините ссылку на соответствующий Интернет ресурс где я смогу почерпнуть знания буду очень признателен.
Заранее благодарю за Ответы. И ещё раз спасибо за вашу работу.
 

Vladimir

Администратор
Команда форума
Добрый день, Ренат.
Вы можете в любой момент перейти на 6-ую версию - для этого не требуется никаких дополнительных действий. Надо лишь установить Руну с менеджером в другой каталог (если на том же компьютере) - никакого взаимодействия между 5-ой и 6-о версий нет. Произвести экспорт проекта в 5-ой версии в файл архива .RPR, а в 6-ой версии - импорт из этого архива. При этом структура проекта и данные будут преобразованы к новой версии. В менеджере указать прежний ключ для активации сетевого доступа.
Единственная проблема - работа с прикреплёнными файлами, у которых размер больше 2-3 Mb. Дело в том, что в 6-ой версии сохранилась работа с приложенными файлами через Яндекс.Диск, который сейчас мешает работать с большими файлами (Яндекс.Диск: проблемы с загрузкой больших файлов).
Также в 6-ой версии мы перешли в сетевой работе на протокол DTLS, с которым есть некоторые проблемы (хотя в общем работа по сети достаточно стабильна), но самая большая сложность оказалась связанная с MacOS. В итоге мы не смогли добиться качественной работы по сети на MacOS и приняли решение перевести сетевую работу на протокол UDP, в котором практически все вопросы решаемы.
В связи с этим изменением, а также с полной переработкой работы с документами, вероятнее всего следующая версия Руны выйдет под номером 7. Кроме того, в этой версии планируются доработки в объектах, формах, администрирование проектов и прочее.
Планируемый срок выпуска 7-ой версии: конец 2020 - начало 2021 г.
 

Vladimir

Администратор
Команда форума
Задача: удаление строк таблицы.
В новой версии конструктора не будет работать прежняя функция Del. Для её замены будет создана одноимённая функция с другим функционалом, которая позволит удалять ненужные данные из документа, включая целые строки, абзацы и таблицы. И таким образом будет возможна реализация поставленной задачи без использования макросов.
 

Vladimir

Администратор
Команда форума
1. Правильно ли я понимаю, что Макрос записывается и соответственно применяется для конкретного шаблона с поддержкой макроса (т.е. макрос прописанный для Шаблона 1 не может быть применен для Шаблона 2. Для Шаблона 2 надо записывать свой макрос)?

Да, каждый шаблон содержит свой набор макросов, который будет доступен только ему. Уточню, что это не правило, но самое правильное решение.
Шаблон, содержащий макрос, имеет расширение не .dotx, а dotm.
 

Vladimir

Администратор
Команда форума
2. Возможно ли для одного и того же шаблона написать несколько макросов, естественно с разными действиями (согласно Справке по базе макросу присваивается имя runa. При попытке записать название макроса "runa удаление", ворд ругнулся на "иностранном языке" и ничего не записалось. Что делать (какое имя присвоить макросу), если я хочу для одного шаблона записать несколько макросов?

Можно создать любое число макросов, но программа будет автоматически выполнять только один макрос, который имеет название "runa". Все остальные макросы должны выполняться вручную или при создании/открытии документа (AutoExec / AutoNew / AutoOpen). Но использование макросов при стандартных действиях не сработают, так как заполнение данных шаблона происходит после создания и открытия документа.
В макрос "runa" можно вставить все необходимые для выполнения команды.
Либо использовать макросы, выполняемые по кнопке на панели, или по сочетанию клавиш на клавиатуре.

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

Vladimir

Администратор
Команда форума
3. Будет ли написанный мной макрос автоматически применяться у иных пользователей Проектом, т.е. подгрузится ли соответствующий макрос с Шаблоном в машину иного пользователя этим Проектом, при подключении к проекту?

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

Vladimir

Администратор
Команда форума
4. Word предлагает два варианта применения Макроса: 1. добавление кнопки на панель быстрого доступа; 2. назначение сочетания клавиш. Возникают вопросы:
Устанавливая в шаблоне кнопку Макроса в панели быстрого доступа или сочетание клавиш применения Макроса - эти же настройки установятся в Wordах иных пользователей при многопользовательском режиме (при подключении к проекту иных пользователей) или мне надо делать настройки в их Wordах?

По хорошему - у всех пользователей должен стоять MS Word одной версии. В противном случае возможны ошибки, подобные этой: Формирование документа Word по сети - пропадают пробелы.
Но вероятнее всего, если версии офисных приложений не сильно отличаются - работать будет без каких-либо дополнительных действий со стороны пользователей.
 

Vladimir

Администратор
Команда форума
5. Возможно ли сделать визуальную кнопку соответствующего Макроса в ленте word (не быстрая клавиша, а какая-нибудь дополнительная) (прошу не "бить" если вопрос глупый)?
При быстрой проверке выяснили, что лента настраивается индивидуально на каждом компьютере, поэтому вероятнее всего - автоматически кнопка в Word-е не появится. Но надо будет ещё посмотреть и разобраться повнимательнее с данным вопросом.
 

Vladimir

Администратор
Команда форума
6. Возможно ли настроить Базу таким образом, чтобы Макрос применялся автоматически при создании документа (например: В Шаблоне 5 получателей (соответственно и поскольку Шаблон содержит 10 строк - 5 из них заполнены не будут), в Базе устанавливаю количество получателей 5 (тут "отсылка" к 6-й версии Руны, лишние поля скрываются). Назначается Расчётное поле количество применения макроса (10 - 5 = значение 5). При формировании текстового документа Word автоматически применяет удаление лишних строк 5 раз (при текущих настройках пользователь применяет макрос 5 раз нажимая на кнопку либо сочетание клавиш)?
Вот тут уже непонятно.
Может проще сделать нужное число шаблонов, которые разместить в папках с номерами. Рассчитывать нужное число задаваемых полей и при открытии шаблона - будет показываться тот, в котором выводятся нужные строки?
 

Vladimir

Администратор
Команда форума
7. Как посмотреть код Макроса (то есть я его записал так сказать "визуально", но сам Word записал действия в форме Кода) и на каком языке программирования записывается этот код Макроса (что мне почитать, чтобы научиться понимать эту кодировку). Если скините ссылку на соответствующий Интернет ресурс где я смогу почерпнуть знания буду очень признателен.
Для просмотра макроса надо открыть окно макросов:
Окно для просмотра макросов.PNG
выбрать нужный и нажать кнопку "Изменить".
Откроется окно приложения "Microsoft Visual Basic for Applications", которое и будет содержать код на VBA (Visual Basic for Applications) для MS Office.
Visual Basic - это и есть язык программирования, который используется в продуктах MS.
Информации по данному языку в Интернете много, искать можно по ключевым словам "Программирование на VBA".
Но хоть мелкомягкие и утверждают, что "Это простой", но тут же правильно добавляют, что "и в то же время мощный язык программирования". А как и любая мощность - она требует обширных знаний в данной области.
Даже для самых простых операций требуется знать достаточно большой объём информации, а в наше время - именно время и является самым ценным ресурсом. Каждый сам для себя решает, на что его потратить.
 

Ренат

Продвинутый
Вот тут уже непонятно.
Может проще сделать нужное число шаблонов, которые разместить в папках с номерами. Рассчитывать нужное число задаваемых полей и при открытии шаблона - будет показываться тот, в котором выводятся нужные строки?
Сейчас так и сделано, но уже сейчас 40 шт. На базе объекта 3 формы связи, каждый шаблон должен содержать подпись исполнителя (user) (на 6 версии будет поле ~user). Число вариантов 10 итого мы имеем минимум 400 шаблонов (это для одной формы связи). В общем с точки зрения человека который пишет шаблоны это слишком много времени вот и ищу варианты как сделать проще.
 

Ренат

Продвинутый
Я так понял что макрос runa запускается сразу при создании файла шаблона и до подстановки в шаблон значения полей. Соответственно он не подходит под мои задачи так как я описал (удалять надо строки как раз с пустыми значениями). Вопрос Для создания шаблона с макросом запускаемым в ручном режиме пользователем обязательно делать шаблон с поддержкой макроса или достаточно в обычном шаблон предусмотреть макрос?
 

Vladimir

Администратор
Команда форума
Я так понял что макрос runa запускается сразу при создании файла шаблона и до подстановки в шаблон значения полей.
Нет, макрос "runa" запускается после заполнения документа, иначе его выполнение не имело бы смысла.

В приложении - пример проекта с шаблоном, поддерживающем макросы .dotm, в котором создан макрос "runa" следующего содержания:
Код:
Sub runa()
    With Selection.Find
        .ClearFormatting
        .Text = "DELETE"
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .Execute
        Do While .Found = True
            Selection.Rows.Delete
            .Execute
        Loop
    End With
End Sub

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

После заполнения документа значениями выполняется макрос, который ищет в документе строку "DELETE" и удаляет её до тех пор, пока поиск даёт результат.
В результате получаем таблицу, в которой строки с пустыми значениями удалены.
 

Вложения

  • Удаление строк в документе.rbase
    15.4 KB · Просмотры: 15

Anti

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