| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			
			Запрет на печать и сохранение документов doc, xls.
			 
			
			АХ 3.0 SP 5 
		
		
		
		
		
		
			Как наложить запрет (выборочно) на печать и сохранение, открываемых документов (doc, xls)? Смотрел как вариант отключение этих опций меню макросами, но как эти макросы привязать к любому файлу? Открытие в АктивХ, нескольких документов привело к проблемам.. В связи с чем вопрос, может кто уже делал подобное? 
				__________________ 
		
		
		
		
	PS. Сложно приехать в Москву, но ещё сложнее уехать отсюда.  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Moderator 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Макросы можно вставлять (и запускать) программно в момент создания документов. 
		
		
		
		
		
		
		
		
			Вставка макроса: X++: public void setVBACode(str _code) { COM vbp; COM vbc; COM vbmdl; COM vbcode; ; vbp = comDocument.VBProject(); vbc = vbp.VBComponents(); vbmdl = vbc.Add(1); vbcode = vbmdl.CodeModule(); vbcode.InsertLines(vbcode.CountOfLines() + 1, _code); } X++: void runVBACode(str _name) { comApplication.run(_name); } Последний раз редактировалось Андре; 26.05.2010 в 15:43.  | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Документ уже создан до меня.. Мне его нужно только открыть, так что бы нельзя было печатать и сохранять.
		 
		
		
		
		
		
		
			
				__________________ 
		
		
		
		
	PS. Сложно приехать в Москву, но ещё сложнее уехать отсюда.  | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Moderator 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Вставляйте макросы и запускайте их в момент открытия документа.
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 Moderator 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Собственно сам текст макроса, который надо вставлять в открываемый документ: 
		
		
		
		
		
		
		
	X++: Private Sub Workbook_BeforePrint(Cancel As Boolean) Cancel = True End Sub  | 
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			По большому счету - это невозможно. Если на экране отображена "картинка" то распечатать ее можно будт очень многими способами. Начиная от PrintScreen и копирования в другой файл и  кончая банальной перезаписью с листа. 
		
		
		
		
		
		
		
	Максимум что Вы можете сделать - это заблокировать отдельные пункты меню. Но, во-первых, это потребует фактически отключение систем безопасности (разрешение записи и выполнения макросов), а, во-вторых, как было указано ранее, если пользователю очень надо, он найдет способ обойти ограничение  | 
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 Moderator 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Не, ну если очень нужно - можно реализовать задачу, которая запускается на AOS-е или пакетном сервере, открывает документ, сохраняет его в JPEG или PDF и добавляет серую надпись поперек листа - DRAFT (чтобы нельзя было распечатать).  Полученный PDF возвращается пользователю.
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Серая надпись никак не может воспрепятствовать печати. Ну, разве что это не будет официальным документом. Так и запрет обычно пытаются ввести вовсе не для официальных документов, а для неких отчетов. Только напрочь забывают, что циферки из отчета банально можно переписать на бумажку  
		
		
		
		
		
		
		
	 
		 | 
| 
	
 | 
| 
			
			 | 
		#9 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Чето не доганяю чего то.. 
		
		
		
		
		
		
			Есть файл, abs.doc.. Как в него вставить макрос, а потом запустить? Я ведь открываю файл во внешнем приложении WinApi::shellExecute(), так как ActiveX глючит (не хочет работать с несколькими файлами), как получить comDocument? 
				__________________ 
		
		
		
		
	PS. Сложно приехать в Москву, но ещё сложнее уехать отсюда.  | 
| 
	
 | 
| 
			
			 | 
		#10 | 
| 
			
			 Moderator 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Как то так: 
		
		
		
		
		
		
		
	X++: ComExcelDocument_Ru doc = new ComExcelDocument_Ru();
;
doc.open(filename);
doc.setVBACode(macro_text); | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: 3oppo (1). | |
| 
			
			 | 
		#11 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
				__________________ 
		
		
		
		
	PS. Сложно приехать в Москву, но ещё сложнее уехать отсюда.  | 
| 
	
 | 
| 
			
			 | 
		#12 | 
| 
			
			 Moderator 
		
			
	 | 
	
	
	
		
		
		
		 PHP код: 
	
			
	Еще можно посмотреть последние версии офиса - не умеют ли они сохранять данные в PDF формате (OpenOffice давно его поддерживает).  | 
| 
	
 | 
| 
			
			 | 
		#13 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Возникает вот такая ошибочка.. 
		
		
		
		
		
		
			Цитата: 
	
		
			Метод "VBProject" в COM-объекте класса "_Workbook" возвратил код ошибки 0x800A03EC (<неизвестно>), который означает: Программный доступ к проекту Visual Basic не является доверенным.
		
	 
				__________________ 
		
		
		
		
	PS. Сложно приехать в Москву, но ещё сложнее уехать отсюда.  | 
| 
	
 | 
| 
			
			 | 
		#14 | 
| 
			
			 северный Будда 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Сообщение от Владимир Максимов
			 
 
			Серая надпись никак не может воспрепятствовать печати. Ну, разве что это не будет официальным документом. Так и запрет обычно пытаются ввести вовсе не для официальных документов, а для неких отчетов. Только напрочь забывают, что циферки из отчета банально можно переписать на бумажку  
		
	![]() Только в этом случае ИМХО проще новый репорт нарисовать - его заведомо не поправишь и не пересохранишь 
				__________________ 
		
		
		
		
	С уважением, Вячеслав  | 
| 
	
 | 
| 
			
			 | 
		#15 | 
| 
			
			 Moderator 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Как это лечится?
		
	 
2003: Tools - Macro - Security - Trusted Publishers - Trust Access To VB Project 2007: Excel Options - Trust Center - Trust Center Settings - Macro Settings - Trust Access To VB Project  | 
| 
	
 | 
| 
			
			 | 
		#16 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			сенкс
		 
		
		
		
		
		
		
			
				__________________ 
		
		
		
		
	PS. Сложно приехать в Москву, но ещё сложнее уехать отсюда.  | 
| 
	
 | 
| 
			
			 | 
		#17 | 
| 
			
			 Moderator 
		
			
	 | 
	
	
	
		
		
		
		 
			
			100% - дело в этом. Проверьте не осталось ли запущенных экземпляров Excel, так как эта настройка разделяется между всеми экземплярами Excel.
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#18 | 
| 
			
			 Moderator 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Вот, кстати, я писал два метода.  Один проверяет - установлена ли данная настройка.  Второй - устанавливает флаг. Не гарантирую, что будет работать со всеми версиями Excel: 
		
		
		
		
		
		
		
	X++: static boolean checkTrustedAccessToVBA() { #winapi container keyValue; int regKey; str keyPath = @"Software\Microsoft\Office\%1\Excel\Security"; ; keyPath = strfmt(keyPath, gm_reportExcelApplication::getExcelVersion()); regKey = WinAPI::regOpenKey(#HKEY_CURRENT_USER, keyPath, #KEY_READ); if(!regKey) return true; keyValue = WinAPI::regGetValue(regKey, 'AccessVBOM'); WinAPI::regCloseKey(regKey); if(conlen(keyValue) != 1) return true; if(conpeek(keyValue, 1) == 1) return true; else return false; X++: static void setTrustedAccessToVBA() { #winapi container keyValue; int regKey; str keyPath = @"Software\Microsoft\Office\%1\Excel\Security"; ; keyPath = strfmt(keyPath, gm_reportExcelApplication::getExcelVersion()); regKey = WinAPI::regOpenKey(#HKEY_CURRENT_USER, keyPath, #KEY_WRITE); if(regKey) { WinAPI::regSetValueEx(regKey, 'AccessVBOM', #REG_DWORD, 1); WinApi::regCloseKey(regKey); }  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: alex55 (1). | |
| 
			
			 | 
		#19 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Ооо.. еще раз сенкс..  
		
		
		
		
		
		
			Но вот только макрос приведенный вами отказывается работать.. ![]() Прописывается нормально, но только почему то не отрабатывает?! 
				__________________ 
		
		
		
		
	PS. Сложно приехать в Москву, но ещё сложнее уехать отсюда.  | 
| 
	
 | 
| 
			
			 | 
		#20 | 
| 
			
			 SAP 
		
			
	 | 
	
	
	
		
		
		
		 
			
			А я как то делал отчеты с макроссами, я тогда создавал темплейт и в нем писал макрос для автоматического выравнивания объединенных ячеек. Далее создавал новый документ на основании шаблона, на мой взгляд, это куда проще чем вставлять прямо в коде. Хотя как сказать....
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| Теги | 
| excel, word, печать | 
| 
	
	 | 
	
		
			 
			Похожие темы
		 | 
	||||
| Тема | Ответов | |||
| Печать самих файлов PDF | 9 | |||
| Печать (сохранение) отчета в PDF | 41 | |||
| Печать документов по Заказам, Закупкам | 8 | |||
| Серии документов | 3 | |||
| Печать документов от разных юр. лиц из одной компании | 15 | |||
		
  |