1

Тема: как из макроса открыть документ в режиме "не исполнять макросы"

Задача: Требуется произвести модификацию тела макроса, содержащегося в каждом из группы документов.

Используется в цикле метод  Documents.Open
Проблема в том, что при открытии каждого документа начинает исполняться модуль Document_Open(), который не нужно исполнять для решения требуемой задачи.

Вопрос: каким образом "запретить" исполнение макроса при открытии документа?

2

Re: как из макроса открыть документ в режиме "не исполнять макросы"

Нужно в тело Document_Open() в начале поставить запрос MsgBox на выполнение

msg=MsgBox("Выполнить Document_Open()?", vbYesNo)
If msg = 7 Then Exit Sub

3

Re: как из макроса открыть документ в режиме "не исполнять макросы"

СПАСИБО.  На мысль натолкнули...  Только файлов в цикле - сотни.  Отвечать замучишься! Хотелось бы  что-нибудь кардинальное!

4

Re: как из макроса открыть документ в режиме "не исполнять макросы"

Тогда надо ввести в общий модуль переменную Public boo_DocOpen As Boolean
Код запроса в тело макроса, который запускает цикл.

msg=MsgBox("Выполнить Document_Open()?", vbYesNo)
If msg = 7 Then
Public boo_DocOpen = False
Exit Sub
End if 

А в тело Document_Open()

If boo_DocOpen = False Then Exit Sub

Тогда при запуске макроса на цикл один раз будет запрос, а потом Document_Open() не будет выполняться т.к. boo_DocOpen = False

5

Re: как из макроса открыть документ в режиме "не исполнять макросы"

Если у Вас цикл запускается из другого модуля или формы то можно указать ThisDocument.boo_DocOpen = False и можно в принципе обойтись без запроса

6

Re: как из макроса открыть документ в режиме "не исполнять макросы"

Это решение - продолжение предыдущей мысли. Дальше развивать не обязательно. Спасибо.

Поскольку документов сотни и они уже СОДЕРЖАТ модуль Document_Open.  Трудоемко с ними воевать!
Мне бы хотелось получить доступ к механизму отключения исполнения макроса при открытии файла. Типа того, когда система безопасности спрашивает "Отключить макросы" (уровень безопасности - средний).

7

Re: как из макроса открыть документ в режиме "не исполнять макросы"

Вообще-то Безопасность макросов это глобальная настройка Word и помимо Document_Open не будут доступны другие макросы, а так мы просто при boo_DocOpen = False даем команду на выход из процедуры Document_Open, если открываемые документы имеют разные модули Document_Open, то я думаю лучше написать процедуру проверки наличия в модуле  ThisDocument переменной  boo_DocOpen и при ее отсутствии добавление кода в тело модуля......

8

Re: как из макроса открыть документ в режиме "не исполнять макросы"

Сам таким не занимался, но идеи есть:
1. Окрыть еще одну копию Word, с которой и работать, отключив в ней макросы.
2. В справке наткнулся на параметр Application.AutomationSecurity, который управляет активностью макросов в документах, открываемых програмно.

Макросы под заказ и готовый пакет - mtdmacro.ru

9

Re: как из макроса открыть документ в режиме "не исполнять макросы"

Согласен, но еще одна копия увеличит загрузку ЦП

10

Re: как из макроса открыть документ в режиме "не исполнять макросы"

Что ж, решение, похоже, подсказал Вождь. Смотрим пример из справки:

Sub Security()
    Dim lngAutomation As MsoAutomationSecurity

    With Application
        lngAutomation = .AutomationSecurity 'Запоминаем состояние безопасности макросов
        .AutomationSecurity = msoAutomationSecurityForceDisable 'Отключаем выполнение макросов
        With .FileDialog(msoFileDialogOpen)
        'Открываем файл
            .Show
            .Execute
        End With
        'Восстанавливаем состояние безопасности
        .AutomationSecurity = lngAutomation
    End With

End Sub
Лучше день потерять — потом за пять минут долететь!

11

Re: как из макроса открыть документ в режиме "не исполнять макросы"

Все участникам обсуждения ОГРОМНОЕ СПАСИБО.   Результат получен. Все работает.  Тема закрыта.