Ограничение печати рабочей книгой из заданного местоположения (Microsoft Excel)
У Стефано возникла проблема в своей компании: люди часто копируют книгу с сервера на свой компьютер, вносят изменения в книгу, а затем распечатывают книгу. Он хотел бы сделать так, чтобы можно было распечатать только исходную книгу, поэтому он задается вопросом, есть ли способ запретить печать, если книга не находится на сервере.
В Word нет собственного способа сделать это. При желании вы можете создать макрос, выполняющий две следующие задачи:
-
Изучите путь к текущему документу. Если путь — это что угодно, кроме пути к вашему серверу, запретите печать
Вот пример такого макроса. Вы должны поместить эту конкретную версию в модуль ThisWorkbook; он автоматически запускается каждый раз, когда пользователь выбирает печать.
Private Sub Workbook_BeforePrint(Cancel As Boolean) Dim sFile As String sFile = "\\Server.name\folder\path\My file name.xlsm" If ThisWorkbook.FullName <> sFile Then MsgBox "Printing only possible with server copy" Cancel = True End If End Sub
Обратите внимание, что переменная sFile настроена так, чтобы содержать полный путь к книге (где книга должна быть расположена на сервере компании). Если имя текущей книги не совпадает с этим, печать отключена.
Есть потенциальная проблема с этим типом макроса, и она связана с путем к файлу. Возможно, что путь к серверу может отличаться от пользователя к пользователю. Пример макроса проверяет путь, который включает UNC (универсальное соглашение об именах), но не все пути могут работать таким образом. Например, у пользователей может быть папка на сервере, сопоставленная с буквой диска. В одной системе путь может быть g: / myserver / myfolder /, а в другой — z: / myserver / myfolder /.
Макрос не может надежно это компенсировать.
Возможно, вы сможете обойти это с помощью определенно низкотехнологичного подхода. Сначала поместите небольшой текстовый файл (созданный с помощью Блокнота) в ту же папку на сервере, что и книга. На самом деле не важно, что содержит текстовый файл. Затем добавьте этот макрос в модуль ThisWorkbook:
Private Sub Workbook_BeforePrint(Cancel As Boolean) Dim sPath As String Dim sFile As String sPath = ThisWorkbook.Path sFile = sPath & "\" & "TestFile.txt" If Dir(sFile) = "" Then MsgBox "Printing only possible with server copy" Cancel = True End If End Sub
Макрос определяет путь к текущей открытой книге. Затем он добавляется к имени небольшого текстового файла, который вы поместили в ту же папку, что и книга. (В данном случае я дал этому файлу имя TestFile.txt.) Затем используется команда Dir, чтобы проверить, существует ли файл. Если его нет, печать отменяется.
Более широкое решение могло бы заключаться в использовании того, что Microsoft называет IRM (управление правами на доступ к данным). Это решение, которое хорошо подходит для использования в корпоративной среде, позволяет вам контролировать, что люди могут и не могут делать с вашими документами. Хорошее место для начала изучения IRM находится здесь:
https://support.office.com/en-us/article/information-rights-management-in-office-c7a70797-6b1e-493f-acf7-92a39b85e30c
ExcelTips — ваш источник экономичного обучения Microsoft Excel.
Этот совет (13526) применим к Microsoft Excel 2007, 2010, 2013, 2016, 2019 и Excel в Office 365.