我用各种关键词搜索了有关该问题的信息,但所有结果都与如何保护工作簿或在不知道密码的情况下取消保护有关。
我的当前问题并不是一个大问题,但感觉很奇怪,我想知道其他人是否也遇到过这个问题。
我目前正在制作Excel 2010 VBA宏来自动化数据处理。我正在添加工作簿保护,以便用户无法移动工作表的位置。我通过VBA“thisworkbook.protect”或传统的Excel菜单完成此操作。
当我运行以下代码时,无论密码、结构/窗口设置如何,工作簿保护都完全消失。
Sub test()
ThisWorkbook.Worksheets(1).Cells(1, 1).Value(11) = ThisWorkbook.Worksheets(3).Cells(1, 1).Value(11)
End Sub
只需在代码末尾添加“thisworkbook.protect”,就可以重新锁定工作簿并解决问题,这就是为什么这不是一个大问题的原因。但是这种现象对我来说完全无法理解。
我感谢任何给予反馈的人。谢谢。
编辑1 我认为这不是worksheet.protect的问题。无论工作表和单元格是否受保护,我的问题都会发生,我特别关注工作表的位置和名称,这些都属于workbook.protect命令。
编辑2: 因此,问题如下,并不涉及Workbook.Protect和Worksheet.Protect方法之间的区别: 1. 我打开了一个受保护的工作簿; 2. 运行提供的代码片段而不取消保护工作簿,因为它不会影响工作表的保护; 3. 先前的操作取消了工作簿的保护,尽管我的意图是保护工作簿。
Workbook.Protect
方法可以保护工作簿免受用户交互的影响 - 包括来自 UI 的整个工作簿相关操作(例如添加/删除/移动工作表),但不包括来自代码的操作。为了保护工作表,您必须使用Worksheet.Protect
方法,该方法对于由代码引发的更改也能正常工作。 - Vitaliy Prushak