帕特里克(Patrick)想知道如何阻止Excel在“受保护”视图中打开工作簿。他希望在“普通”视图中打开文件,以便任何人都可以打开,阅读和编​​辑文件。

答案完全取决于“保护视图”的含义。如果您要保护工作表不受保护,则通过宏进行操作相对容易。如果您真的在谈论Excel所说的“保护视图”,那么情况就完全不同了。

如果要确保工作簿不受保护,以便可以在打开后对其进行编辑,则可以使用如下所示的简单的宏:

Private Sub Workbook_Open()

ThisWorkbook.Unprotect End Sub

当然,这并不能解除对单个工作表的保护。这涉及更多步骤,因为您需要循环浏览工作簿中的每个工作表。以下宏应放置在要不受保护的工作表的工作簿的ThisWorkbook模块中:

Private Sub Workbook_BeforeClose(Cancel As Boolean)

' Reprotect sheets that were protected on open workbook     Call ReprotectSheets ' Save changes in ThisWorkbook     ThisWorkbook.Save End Sub
Private Sub Workbook_Open()

' Unprotect all sheets in this workbook     Call UnprotectAllSheets End Sub

请注意,这些宏仅比调用执行实际工作的其他宏做得更多。这些其他宏可以放在工作簿的标准模块中:

Public arrProtectedSheets()



Sub ReprotectSheets()

' Reprotect worksheets that were protected on WorkbookOpen     Dim i As Integer

For i = LBound(arrProtectedSheets) To UBound(arrProtectedSheets)

ThisWorkbook.Worksheets(arrProtectedSheets(i)).Protect     Next i End Sub
Sub UnprotectAllSheets()

' Unprotect all worksheets in this workbook     Dim wks As Object     Dim i As Integer

i = 0     For Each wks In ThisWorkbook.Sheets         If IsSheetProtected(wks) Then             ' Remember names of protected sheets in order             ' to reprotect them on WorkbookClose             ReDim Preserve arrProtectedSheets(i)

arrProtectedSheets(i) = wks.Name             i = i + 1             ' Unprotect sheet             wks.Unprotect         End If     Next wks End Sub
Private Function IsSheetProtected(ByRef wks As Excel.Worksheet) As Boolean ' Function returns TRUE If Worksheetsheet Is Protected     With wks         IsSheetProtected = (.ProtectContents Or _           .ProtectScenarios Or .ProtectDrawingObjects)

End With End Function

UnprotectAllSheets宏背后的想法是,它逐步浏览工作簿中的每个工作表,并且,如果它受到保护(由IsSheetProtected宏确定),则工作表的名称存储在数组中。然后,在ReprotectSheets宏中使用数组的内容来再次重新保护那些工作表。当然,此方法假定没有密码与任何受保护的工作表相关联。

如果您实际上是要确保真正的“保护视图”

关闭,那是另外一个故事。受保护视图的设置是在Trust Center中逐个系统进行控制的。您可以按照以下步骤查看设置:

。单击“代码”组中的“宏安全性”。 Excel将显示“信任中心”对话框。

。在对话框的左侧,单击“受保护的视图”。 (请参见图1。)

可用的实际“保护视图”设置取决于您使用的Excel版本。如前所述,这些设置是在系统级别上进行控制的;它们不是在逐个工作簿的基础上处理的。结果是它们不能被宏代码规避。如果可以,那么它将使系统完全容易受到打开工作簿中的任何代码的攻击-我们将回到一些早期版本的Office产品中常见的宏病毒时代。

可在以下Microsoft网站上找到有关“受保护的视图”设置如何运行的其他信息:

https://support.office.com/en-us/article/what-is-protected-view-d6f09ac7-e6b9-4495-8e43-2bbcdbcb6653?ocmsassetID=HA010355931&CorrelationId=fce5243e-6c41-4865-89e9-530f125ea252&ui=en-US&rs=en-US&ad=US

工作簿是否在“受保护的视图”中打开取决于用户的系统设置。这意味着对打开内容的控制完全取决于单个用户,并且工作簿作者不能“强制”对其进行控制。但是,有一些方法可以减轻这种影响,而这与信任有关。请注意,在“信任中心”对话框的左侧,有三个设置可控制相对于工作簿的此设置:

受信任的发布者。*此区域中列出的所有发布者的工作簿都是受信任的,将绕过受保护的视图直接打开。

受信任的位置。*此区域中列出的位置中存储的工作簿是受信任的,并且将绕过受保护的视图直接打开。

受信任的文档。*此区域中提到的各个工作簿都是受信任的,将绕开受保护的视图直接打开。

然后,对于您的工作簿,要绕过Protected View,您需要成为受信任的发布者,该工作簿需要存储在受信任的位置,或者需要在系统上作为受信任的文档记录下来。

同样,所有这些设置都在用户的控制之下,并且无法通过宏代码进行修改。

注意:

如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(12873)适用于Microsoft Excel 2007、2010、2013、2016、2019和Office 365中的Excel。