Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > Проблема с макросами


Автор: midex777 16.1.2017, 20:50
Здравствуйте!
У меня есть следующая задача:
Записать следующие макрокоманды в шаблон при открытии которого:
− AutoNew, при запуске которой происходит отключение всех панелей и линейки прокрутки;
− AutoClose, при запуске которой происходит включение всех отключенных ранее панелей и линейки прокрутки;
− Печать, при запуске которой выполняется печать;
− Выход, при запуске которой происходит выход из программы Word без сохранения изменений в документе. 

Макросы написал в следующем виде:
AutoNew:
Код

Sub AutoNew()
With Application.CommandBars(«Status Bar»)
.Visible = Not .Visible
End With
End Sub


AutoClose
Код

Sub AutoClose()
With Application.CommandBars(«Status Bar»)
Not .Visible=Visible
End With
End Sub


Печать:
Код

Sub printDoc()
ActiveDocument.PrintOut
End Sub


Как сделать выход не разобрался.. что-то типа:
Код

Sub AutoClose()
  If ActiveDocument.Saved = False Then ActiveDocument.Save (только нужно без сохранения)
End Sub


Вопрос состоит в следующем - почему-то выходит сообщение - "invalid outside procedure" на начале любого макроса (sub AutoClose(), например)
Кавычки я уже поправил.... (файл во вложении)
Из текущих макросов работает только Печать...

Автор: Akina 16.1.2017, 21:09
1. AutoNew
Подумай, что будет, если некоторые панели были скрыты в момент запуска макроса?
Нужно читать информацию об имеющихся панелях и их статусах и сохранять её в коллекции, после чего отображаемые скрывать. Безусловно.

2. AutoClose
Подумай, что будет, если некоторые панели были скрыты в момент запуска скрывающего макроса?
Нужно отображать панели в соответствии с сохранёнными в коллекции сведениями. По завершении коллекцию следует очистить (но не удалять!).

3. Печать
Претензий нет.

4. AutoNew
Выход (закрытие открытых документов и выгрузка приложения) выполняется вызовом Application.Quit с соотв. параметрами. 

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

И - пользуйтесь тегом "Код".

Автор: midex777 16.1.2017, 21:29
Благодарю за пояснение!

Код буду вставлять в тег Код.

Макрос выход значит такой:
Код

If ActiveDocument.Saved = False Then Application.Quit



Т.е. можно все макросы в 1 модуле прописать? Осталось понять как вызвать меню макросов при загрузке и убрать линейку и полосу прокрутки... т.е. по AutoExec, AutoNew пока так и не придумал ничего. С VB я новичёк.. 

Файл-шаблон(.dotm) прикладываю.

Автор: Akina 16.1.2017, 22:16
Избыточное цитирование (оверквотинг) удалено.

Цитата(midex777 @  16.1.2017,  22:29 Найти цитируемый пост)
Код буду вставлять в тег Код.

Обещать - не значит жениться?  Ещё раз поправил...

Цитата(midex777 @  16.1.2017,  22:29 Найти цитируемый пост)
Макрос выход значит такой:

Документацию не прочитал, (поэтому) совет не понял. Садись, два.

Цитата(midex777 @  16.1.2017,  22:29 Найти цитируемый пост)
Т.е. можно все макросы в 1 модуле прописать?

Да. 

Цитата(midex777 @  16.1.2017,  22:29 Найти цитируемый пост)
Осталось понять как вызвать меню макросов при загрузке

В исходной задаче о загрузке речь не шла. 

Автор: midex777 16.1.2017, 22:34
Прошу прощения... женат)))

С автозапуском сделал так, но работает только при запуске в VB, а вот при запуске документа не работает((:

Код

Dialogs(wdDialogToolsMacro).Show


А вот как с убрать\вернуть полосу прокрутки и линейку не нашёл... Ткните, пожалуйста.

Автор: Akina 16.1.2017, 23:12
Цитата(midex777 @  16.1.2017,  23:34 Найти цитируемый пост)
как с убрать\вернуть полосу прокрутки и линейку не нашёл... Ткните, пожалуйста.

Сервис - Макрос - Начать запись.
Убрать или вернуть полосу прокрутки (только клавишами! без мыша! так что потренируйтесь сперва).
Сервис - Макрос - Остановить запись.
Сервис - Макрос - Макросы. 
Свежесозданный макрос - Изменить.
И изучайте...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)