利用VBA代码实现自动隐藏、显示指定Excel工作表

时间:2022-08-29 08:04:16

利用VBA代码实现自动隐藏、显示指定Excel工作表

摘要:编写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期.

上一篇:权力的视角:地方大学的治理问题探析 下一篇:规范招投标市场的必要性