Страницы: 1
RSS
Печать листа только через макрос
 
Добрый день!

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

Запрет печати всей книги можно сделать так:
Код
Private Sub Workbook_BeforePrint(Cancel As Boolean) 
    Cancel = True
    MsgBox "Распечатка этой книги запрещена!", vbCritical
End Sub
Но тогда запрет выдает и при запуске макроса.
Как запретить печать в целом, но разрешить печать из макроса?

Спасибо.
 
Проверяйте в этом коде некую переменную, или метку - макрос её ставит, печатает, убирает.
 
Vitaliy+, в макросе
Код
application.enableevents=false
'печать
application.enableevents=true
 
Вариант два.
Вариант 1. Создаете в стандартном модуле глобальную переменную, что-то вроде:
Код
Public IsAllowPrint As Boolean
изменяете код в модуле книге на такой:
Код
Private Sub Workbook_BeforePrint(Cancel As Boolean)
if IsAllowPrint = False then
    Cancel = True
    MsgBox "Распечатка этой книги запрещена!", vbCritical
end if
End Sub
а в своем макросе перед печатью меняете значение:
Код
IsAllowPrint = true'разрешаем печать
ActiveSheet.PrintOut
IsAllowPrint = False'запрещаем снова
Вариант 2. Попроще, без всего, что выше. В макросе, который выводит на печать пишите следующее:
Код
Application.EnableEvents = false 'отменяем отслеживание событий
ActiveSheet.PrintOut
Application.EnableEvents = true 'обязательно разрешаем отслеживание событий заново
но у второго варианта есть минус - если вдруг в момент печати кодом возникнет ошибка и отслеживание событий не будет обратно включено, то распечатать сможет любой без макросов. Плюс и все остальные событийные процедуры листов и книг перестанут работать.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Спасибо большое всем за оперативные ответы!

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

Еще раз спасибо!
 
Цитата
Vitaliy+ написал:
Вариант с переменной почему-то не сработал
видимо, не все учли. Например, переменную объявили не в стандартном модуле, как советовалось, а в модуле ЭтаКнига.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Я пробовал и в стандартном модуле и в модуле ЭтаКнига объявлять переменную. Результат один и тот же.

Еще один вопрос возник по ходу дела. Может подскажете, чтоб не создавать новую тему?
Можно ли как-то поставить таймер на кнопку? Например, после нажатия на кнопку, она становится не активна на 10 секунд.

Спасибо.
Изменено: Vitaliy+ - 23.03.2018 19:14:25
 
Цитата
Vitaliy+ написал:
Результат один и тот же
у меня работает. Значит что-то делаете не так. Например, объявили не как Public. А может вообще не так используете.
Цитата
Vitaliy+ написал:
чтоб не создавать новую тему?
Лучше Вам с правилами форума сначала ознакомиться. Согласно им как раз надо новую создавать, а не сваливать все свои вопросы в одну кучу.
Изменено: Дмитрий Щербаков - 23.03.2018 18:07:37
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Страницы: 1
Наверх