Stefano在他的公司中遇到问题,人们经常将工作簿从服务器复制到自己的计算机上,在工作簿中进行更改,然后打印该工作簿。他想强制只允许打印原始工作簿,因此他想知道是否有一种方法可以禁止打印,除非工作簿是服务器上的工作簿。

在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和Office 365中的Excel。