У Стефано возникла проблема в своей компании: люди часто копируют книгу с сервера на свой компьютер, вносят изменения в книгу, а затем распечатывают книгу. Он хотел бы сделать так, чтобы можно было распечатать только исходную книгу, поэтому он задается вопросом, есть ли способ запретить печать, если книга не находится на сервере.

В Word нет собственного способа сделать это. При желании вы можете создать макрос, выполняющий две следующие задачи:

  1. Изучите путь к текущему документу. Если путь — это что угодно, кроме пути к вашему серверу, запретите печать

Вот пример такого макроса. Вы должны поместить эту конкретную версию в модуль 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.