工作簿事件示例——强制用户必须启用宏

有时候,我们使用VBA为工作簿编写了一些功能,但是如果用户在打开工作簿时不启用宏设置或者彻底禁用宏,那么这些功能就无法使用。例如,我使用VBA为工作簿添加了自定义菜单,但是如果用户禁用宏,那么自定义菜单就无法使用。

如何强制用户在使用工作簿时启用宏呢?

使用VBA代码来实现。在打开工作簿时,Excel提示用户必须启用宏,否则工作簿中数据工作表均不可见。

首先,在工作簿中新建一个如下图1所示的工作表,并命名为<启用宏>,作为用户禁用宏时的特别提示。

接着,打开VBE编辑器,在标准模块中输入下面的代码:

Sub AskUserEnabledMacros()

Dim wksInfoSheet As Worksheet

Dim objSheet As Object

On Error Resume Next

'引用<启用宏>工作表并判断其是否存在

Set wksInfoSheet =ThisWorkbook.Worksheets('启用宏')

If wksInfoSheet Is Nothing Then

MsgBox '不能够找到<启用宏>工作表',vbCritical

Exit Sub

End If

'关闭屏幕更新

Application.ScreenUpdating = False

'遍历工作簿中的所有工作表并设置所有工作表可见

For Each objSheet In ThisWorkbook.Sheets

objSheet.Visible = xlSheetVisible

Next objSheet

'隐藏<启用宏>工作表

wksInfoSheet.Visible = xlSheetVeryHidden

'隐藏想要隐藏的工作表,例如<sheet3>工作表

ThisWorkbook.Worksheets('Sheet3').Visible = xlSheetVeryHidden

'保存工作簿

ThisWorkbook.Saved = True

'恢复屏幕更新

Application.ScreenUpdating = True

End Sub

'隐藏除<启用宏>工作表之外的所有工作表

Sub RunOnClose()

Dim wksInfoSheet As Worksheet

Dim objSheet As Object

On Error Resume Next

'引用<启用宏>工作表并判断其是否存在

Set wksInfoSheet =ThisWorkbook.Worksheets('启用宏')

If wksInfoSheet Is Nothing Then

MsgBox '不能够找到<启用宏>工作表',vbCritical

Exit Sub

End If

'关闭屏幕更新

Application.ScreenUpdating = False

'显示<启用宏>工作表

wksInfoSheet.Visible = xlSheetVisible

'隐藏其他工作表

For Each objSheet In ThisWorkbook.Sheets

If Not objSheet Is wksInfoSheet Then

objSheet.Visible = xlSheetVeryHidden

End If

Next objSheet

'保存工作簿

ThisWorkbook.Save

End Sub

在ThisWorkbook对象模块中,输入下面的代码:

Private Sub Workbook_Open()

'当工作簿打开时运行AskUserEnabledMacros过程

AskUserEnabledMacros

End Sub

Private SubWorkbook_BeforeClose(Cancel As Boolean)

'隐藏除<启用宏>工作表之外的所有工作表

RunOnClose

End Sub

当打开工作簿时,如果用户禁用了宏,那么将只显示<启用宏>工作表,提示用户要启用宏才能运用工作簿的所有功能,而其他工作表都被隐藏。并且,Excel会在上方显示“安全警告:宏已被禁用”,如图1所示。如果单击其右侧的“选项”并启用宏,那么会隐藏<启用宏>工作表并使其他工作表可见。

如果用户启用了宏,那么在打开工作簿时,触发Workbook_Open事件,执行其中的代码,即调用AskUserEnabledMacros过程,隐藏<启用宏>工作表及用户不想让他人看到的工作表,其他工作表可见。在关闭工作簿时,触发Workbook_BeforeClose事件,执行其中的代码,即调用RunOnClose过程,隐藏除<启用宏>工作表之外的其他所有工作表。这样,再次打开该工作簿时,如果用户禁用宏,那么工作簿中就会只出现这个工作表。

(0)

相关推荐

  • Excel VBA工作薄 5.18 禁用宏功能就能阻止我的保护嘛?NO WAY!

    前景提要 在我们学习VBA保护数据工作薄的过程中,大家一定有不少的疑问,因为很多人都说,依靠工作薄的宏文件来保护数据是非常的不合理的,因为宏这个功能是能够被禁用的,确实是这样,现在很多的电脑都已经默认 ...

  • VBA:如何将指定文件夹下所有工作簿的工作表移动到当前工作簿?

    每天一篇Excel技术图文 微信公众号:Excel星球 NO.568-多表移动到当前工作簿 作者:看见星光  微博:EXCELers / 知识星球:Excel HI,大家好,我是星光.Excel会员群 ...

  • EXCEL强制启用宏的实现

    如果,EXCEL禁用了宏,那么,我们制作的很多功能就不能实现了.为此,必须要求启用宏. 首先,当然是在工作薄里添加一个名为"启用宏"的工作表,写上些内容,提示如何启用宏. 其次,在 ...

  • VBA代码库10:强制用户启用宏

    有时,必须确保用户在打开工作簿时启用宏,否则就不能实现工作簿的效果.由于无法使用宏去打开宏,因此需要一种确保用户启用宏的技术.下面讲解的方法隐藏除"欢迎"工作表(告诉用户启用宏)之 ...

  • Excel实战技巧89:强制用户保护工作簿/工作表

    excelperfect 使用VBA代码,在用户关闭工作簿时,只有设置了保护工作簿,才能正常关闭. 在ThisWorkbook代码模块中,输入下面的代码: Private Sub Workbook_B ...

  • VBA代码库11:强制用户启用宏(续)

    excelperfect 在<VBA代码库10:强制用户启用宏>中,讲解了一段用户在打开工作簿时必须启用宏才能使用工作簿功能的代码.本文给出另一段同样可以实现强制用户启用宏的代码. 如果用 ...

  • 如何强制用户启用宏?

    问:有时候,我们使用VBA为工作簿编写了一些功能,但是如果用户在打开工作簿时不启用宏设置或者彻底禁用宏,那么这些功能就无法使用.例如,有位网友问我,他想使用双重保护来保护某工作簿,一重保护是工作簿自带 ...

  • 强制用户启用宏

    有时,必须确保用户在打开工作簿时启用宏,否则就不能实现工作簿的效果.由于无法使用宏去打开宏,因此需要一种确保用户启用宏的技术.下面讲解的方法隐藏除"欢迎"工作表(告诉用户启用宏)之 ...

  • 强制启用宏与深度隐藏工作表

    打开VBE编辑器在hisWorkbook添加VBA代码,如下图 操作方法: 按ALT F11组合键打开VBE编辑器,复制下面的代码到ThisWorkbook里面 Private Sub Workboo ...

  • Excel怎么保护自己的劳动成果?强制用户启用宏,再加上这一步

    当Excel工作簿中含有VBA代码时,用户在使用时需要启用宏,否则工作簿的某些功能就会失效.或者是编辑的VBA代码含有定期删除指令,为了保证工作簿的安全性,和防止他人禁用宏造成知识产权法受到侵害,需要 ...

  • 【VBA】按部门快速拆分工作簿

    举个栗子,如上图所示的数据表,倘若需要按班级,将该表的数据拆分为1~2~3班三个工作簿,并保留在电脑的指定位置,就可以使用我们今天这篇小代码了. 操作动画演示: 动画中所粘贴的代码如下: Sub Ne ...

  • 批量合并多个Excel工作簿文件到一起其实很简单

    批量合并多个Excel工作簿文件到一起其实很简单