时间:2022-08-29 08:04:16
摘要:编写VBA代码实现自动隐藏、显示任意Excel文档中的指定工作表。
关键词:隐藏工作表 显示工作表 Visible属性 VBA代码
日常工作中我们会接触各种各样的数据。随着计算机的普及,人们都会使用这种现代化的工具处理数据。在计算机技术中专门有专业的数据库软件来管理数据,这其中有IBM 的DB2、甲骨文的Oracle、微软的SQL Server、Unix系统用的Informix、免费的mySQL等等。这些都是功能强大并且得到用户广泛应用和认可的专业数据库软件。但是它们都有一个特点就是需要较长时间的学习才能掌握,这并不利用计算机水平一般又需要处理各种日常工作数据的用户。
其实对付数据量不是非常大的日常工作,我们几乎每个人都在用的Excel就足够了。因此Excel成了我们日常办公的数据处理软件的首选,很多中小企业的销售、财务、库房管理等都在使用它来完成数据的处理。但是Excel 工作表在默认情况下是全部开放的,只要打开文件任何用户都可以任意操作。这时如果你既要共享Excel数据分析处理的结果,又不想让对方看见具体数据,如何保密就成了问题。
例如:利用单位月费用报销的明细数据制作了各部门报销费用的比较图,希望发给各部门查看但又不能让对方看到具体数据项。这就需要隐藏“原始数据”所在数据表,只显示“各部门报销费用比较图”所在的数据表。
下面就这个问题给出几种解决方法:
1 直接隐藏工作表
“右键单击指定工作表标签”“隐藏”,这样重要的工作表就被隐藏起来了。虽然该方法简单易行,但是却存在一个致命弱点,他人只需右键单击任意工作表标签“取消隐藏”,就会重现被隐藏的工作表。
2 隐藏工作表并保护工作簿
按照上面的方法将工作表隐藏,然后通过设置“保护工作簿结构”(可以选择添加口令)。这样操作后被隐藏的工作表将无法再显示,只能先取消“保护工作簿”才能取消隐藏。
但是这个方法也有缺点,就是当“保护工作簿结构”时,对于工作表的其它操作也无法进行,比如:插入、删除、重命名等。
3.1 “右键单击工作表标签”“查看代码”,打开Visual Basic编辑器窗口,在左侧可以看到“工程”和“属性”面板。
3.2 在“工程”面板中显示了该Excel文档的所有工作表。选择要隐藏的工作表,然后在“属性”面板中设置 “Visible”的参数为2-xlSheetVeryHidden。这样工作表就被隐藏了,而且此时“取消隐藏”功能显示为灰色不可用。
但是别人只要知道这个方法,要显示工作表时只要再修改属性中“Visible ”的参数为-1- xlSheetVisible就可以了。
3.3 为了防止无权用户的修改,我们需要设置口令。打开“Visual Basic编辑器窗口”“工具VBAProject属性保护”选项卡,勾选“查看时锁定工程”,并设置查看工程属性的密码,单击“确定”按钮。
3.4 按下Ctrl+S保存文件,返回Excel界面并且关闭文件。下一次再打开该Excel文档时,只要打开“Visual Basic编辑器窗口”就会立刻提示“VBAProject 密码”,只有输入正确密码才能继续操作。如此一来,即便有人知道这种操作方法,没有密码的话也不能显示出隐藏的工作表,因此大大增强了Excel的安全性能。
注意:每个Excel文档中必须至少有一个工作表的 Visible 属性值为“1- xlSheetVisible”,即至少有一个工作表是显示的。
4 VBA代码实现
4.1 新建Excel文件“右键单击工作表标签”查看代码,打开“Visual Basic编辑器窗口”工程右键单击VBAProject(book1)插入模块双击新建的“模块1”在打开的窗口填写如下代码。
说明:这一系列操作会生成3个宏Hide、show、showall,它们对应的功能如下“隐藏指定工作表”、“显示指定工作表”、“显示全部工作表”。
这段代码会将“password”为名称的工作表中,A列第1-10行单元格内容视为要被隐藏的工作表名称,并将它们高级隐藏。
sub Hide()
For i = 1 To 10 '设定判断1-10行
a = Sheets("password").Cells(i, 1) '把Password表i行1列单元格内容放入变量a
If a "" Then '判断单元格为空,进入下个单元格
Worksheets(a).Visible = 2 '设定单元格中表名称工作表隐藏
Else '结束判断单元格为空
End If
Next '设定i加1进入下1行单元格
End Sub
这段代码会将“password”为名称的工作表中,A列第1-10行单元格内容视为要被显示的工作表名称,并将它们显示。
sub show()
For i = 1 To 10
a = Sheets("password").Cells(i, 1)
If a "" Then
Worksheets(a).Visible = -1
Else
End If
Next
End Sub
这段代码会将文档中全部工作表显示
Sub ShowAll()
Dim ws As Worksheet
For Each ws In Sheets
ws.Visible = -1
Next ws
End Sub
4.2 按下Ctrl+S保存文件右键单击“模块1”导出文件指定文件名和路径保存为.bas文件。
4.3 当有excel文档需要隐藏部分工作表时。“右键单击工作表标签”查看代码,打开“Visual Basic编辑器窗口”工程右键单击VBAProject(“excel文件名”)导入文件导入刚刚导出的.bas文件。这是当前工作簿中就会有对应的3个宏了。
4.4 在当前文档新建名称为“password”的工作表,然后将要隐藏的工作表名称填入password工作表中A列1-10行单元格。最后执行“Hide宏”,就可以实现工作表隐藏了。
注意:password工作表中A列1-10行单元格填写工作表名称一定要和当前Excel工作簿中表名称完全相同,否则会导致代码运行错误。
以上是几种隐藏工作表的方法,最后1种方法是使用起来最方便的。每次只需导入宏代码,然后建立“password工作表”,再在A1-A10单元格中填入要隐藏的工作表名称,最后执行相应的宏就完成了。
参考文献:
[1](美)沃肯巴赫.中文版Excel 2010高级VBA编程宝典.[M]清华大学出版社.2012-1-1.
[2]杨章伟,张婉婉.Excel VBA语法辞典.[M]机械工业出版社. 2010-1-1.
[3]为你的Excel表设置密码.网络与信息.河马.[J]2009年第8期.