Excel Hacks #3:阻止用户执行某些操作

虽然Excel为工作簿和工作表提供了全面的保护,但是这种“生硬的”工具没有限制用户的“特权”,除非您使用一些技巧。
通过监控和响应事件,您能够管理电子表格与用户的交互。事件是处理工作簿和工作表时所发生的操作。一些常见的事件包括打开工作簿、保存工作簿和关闭工作簿。当触发这些事件中的任一事件时,您能告诉Excel自动执行一些VB代码。
提示:用户能够通过完全禁用宏,从而避免所有保护。单击Office按钮─—Excel选项─—信任中心─—信任中心设置,按“宏设置”按钮,如果安全性被设置为“禁用所有宏,并且不通知”,那么在打开含有宏的工作簿时将没有机会运行宏。
阻止工作簿“另存为…”
通过选择Office按钮─—保存─—工具按钮─—常规选项,然后选中“建议只读”复选框,这样可以指定任何工作簿被保存为只读。这能阻止用户对该文件保存所做的任何修改,除非将其保存为不同的名称或者在不同的位置保存该文件。
然而,有时您可能想阻止用户使用或者不使用不同的名称在另一个目录或文件夹中保存工作簿副本。换句话说,您想用户能够在现有文件中保存,而不是在其他地方保存另一个副本。当多个人对某个工作簿保存修改时,这特别方便,此时不会存在保存在不同文件夹中相同工作簿的多个副本。
自从Excel 97后,就可以使用“保存前”事件了。正如其名称所述,该事件在工作簿被保存之前发生,能够在事实发生之前捕获用户、发出警告,以及阻止Excel保存。
要插入代码,打开工作簿并选择“开发工具─—Visual Basic”,双击工程资源管理器中的ThisWorkbook,在VBE中输入下面的代码,如图1所示,然后返回工作簿,再保存工作簿:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Dim lReply As Long
    If SaveAsUI = True Then
        lReply = MsgBox(”对不起,不允许您以其它名称保存本工作簿.” & _
            ”您希望保存本工作簿吗?”, vbQuestion + vbOKCancel)
        Cancel = (lReply = vbCancel)
        If Cancel = False Then Me.Save
        Cancel = True
    End If
End Sub

beforesave
图1:输入到ThisWorkbook中的代码
此时,选择“Office按 钮─—保存”,该工作簿将按预料的那样保存。然而,在选择“Office按钮─—另存为”时,Excel将通知您不能以其它的名称保存该工作簿,除非您禁用宏。
提示:当在Excel 2007中保存工作簿时,如果该工作簿包含宏或代码,那么应该将工作簿保存为启用宏的工作簿(*.xlsm),而不能保存为标准的Excel文件格式( *.xlsx)。
阻止用户打印工作簿
可能您想阻止用户打印您的工作簿,此时使用Excel的“打印前”事件。在VBE中输入下面的代码:
Private Sub Workbook_BeforePrint(Cancel As Boolean)
    Cancel = True
    MsgBox “对不起,您不能打印本工作簿.”, vbInformation
End Sub

如果希望仅阻止用户打印工作簿中特定的工作表,使用下列代码:
Private Sub Workbook_BeforePrint(Cancel As Boolean)
    Select Case ActiveSheet.Name
        Case “Sheet1″, “Sheet2″
        Cancel = True
        MsgBox “对不起,您不能打印本工作簿中的这个工作表.”, vbInformation
    End Select
End Sub

注意,您指定阻止打印工作表“Sheet1”和“Sheet2”。当然,可以修改为工作簿中的任何工作表的名称。要添加工作表,只需在代码后面加上逗号,然后在双引号中输入该工作表的名称。
阻止用户插入更多的工作表
Excel可以保护工作簿的结构以便用户不能删除工作表、重新排列它们出现的顺序、重新命名它们,等等。但是,有时希望仅阻止添加更多的工作表,而仍然允许其它的结构更改。
可以使用下列代码:
Private Sub Workbook_NewSheet(ByVal Sh As Object)
    Application.DisplayAlerts = False
    MsgBox “对不起,不能对工作簿添加任一工作表.”, vbInformation
    Sh.Delete
    Application.DisplayAlerts = True
End Sub

上述代码首先显示消息框,然后在用户单击消息框中的确定按钮后立即删除新添加的工作表。Application.DisplayAlerts = False语句的阻止标准的Excel警告,即要求用户是否想删除工作表。
另一种阻止用户添加工作表的方法是,选择“审阅─—更改─—保护工作簿”,然后按下“保护结构和窗口”。然而,正如本技巧开始所述,Excel的工作表保护是相当“生硬的”工具,它会同时阻止了许多其它的Excel功能。

注:初译自《Excel Hacks》,仅供参考。


提示:您可以在评论中使用HTML标签,且任何与HTML标签相同的符号都会被理解为HTML标签并以相应的格式显示.如果您的评论中有代码,可以使用相应的标签,例如,如果有VB或VBA代码,则可以使用[vb]标签,即[vb]放置的代码[/vb],这样会很清晰地显示代码.

2条评论

  1. EXCEL 2003 复选框 说到:

    我给工作表设置了密码保护 其中 “允许用户可编辑区域”内的“复选框”按钮怎么不能打钩了? 如何设置啊 其他的空白处都可以编辑 唯独“复选框”不能打钩 总提示 “正在试图更改…………撤销工作表保护”的一个警告框

  2. excelperfect 说到:

    我试了一下,可以啊???

留下回复