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

有时,必须确保用户在打开工作簿时启用宏,否则就不能实现工作簿的效果。由于无法使用宏去打开宏,因此需要一种确保用户启用宏的技术。下面讲解的方法隐藏除“欢迎”工作表(告诉用户启用宏)之外的所有工作表,并在每次保存工作簿时强制执行该工作表。如果用户在启用了宏的情况下打开工作簿,则宏将不会隐藏所有工作表。还可以使用Excel的 VeryHidden属性来实现工作表的隐藏,这意味着不能使用Excel的菜单来取消隐藏工作表。但是,这只会影响该工作簿,因此用户可以使用另一个工作簿中的宏取消隐藏所有工作表。但是,如果用户非常熟练,他们总是可以始终进入你的文件中。注意:为防止某些事件循环问题,此代码需要覆盖Excel内置的Save事件,并且还需要复制Excel的“工作簿已更改,您要保存”提示和操作,代码负责所有这些工作。但是,在关闭文件时确实会产生一个非常小的问题。如果用户尝试退出该应用程序,它将关闭工作簿,而不是Excel。再次退出将完全关闭Excel。

下面是代码:

Const WelcomePage = '欢迎'

Private Sub Workbook_BeforeClose(Cancel As Boolean)

'关闭事件以阻止不必要的循环

Application.EnableEvents = False

'评估是否保存工作簿并模拟默认的提示信息

With ThisWorkbook

If Not .Saved Then

Select Case MsgBox('你想保存对 '' &.Name & '' 工作簿所做的变化吗?', _

vbYesNoCancel + vbExclamation)

Case Is = vbYes

'调用自定义的保存程序

Call CustomSave

Case Is = vbNo

'不保存

Case Is = vbCancel

'设置过程来取消关闭

Cancel = True

End Select

End If

'如果单击取消, 重新打开事件并取消关闭,

'否则不保存改变而关闭工作簿.

If Not Cancel = True Then

.Saved = True

Application.EnableEvents = True

.Close savechanges:=False

Else

Application.EnableEvents = True

End If

End With

End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

'关闭事件以阻止不必要的循环

Application.EnableEvents = False

'调用自定义的保存程序并设置工作簿的saved属性为true

'(取消常规的保存)

Call CustomSave(SaveAsUI)

Cancel = True

'重新打开事件并设置saved属性为true

Application.EnableEvents = True

ThisWorkbook.Saved = True

End Sub

Private Sub Workbook_Open()

'取消隐藏所有工作表

Application.ScreenUpdating = False

Call ShowAllSheets

Application.ScreenUpdating = True

End Sub

Private Sub CustomSave(Optional SaveAs As Boolean)

Dim ws As Worksheet, aWs As Worksheet,newFname As String

'关闭屏幕更新

Application.ScreenUpdating = False

'设置为活动工作表

Set aWs = ActiveSheet

'隐藏所有工作表

Call HideAllSheets

'直接保存工作簿或提示另存为文件名

If SaveAs = True Then

newFname =Application.GetSaveAsFilename( _

fileFilter:='Excel Files (*.xls*),*.xls*')

If Not newFname = 'False'Then ThisWorkbook.SaveAs newFname

Else

ThisWorkbook.Save

End If

'恢复文件还原到用户所在的位置

Call ShowAllSheets

aWs.Activate

'恢复屏幕更新

Application.ScreenUpdating = True

End Sub

Private Sub HideAllSheets()

'隐藏除'欢迎'外的所有工作表

Dim ws As Worksheet

Worksheets(WelcomePage).Visible =xlSheetVisible

For Each ws In ThisWorkbook.Worksheets

If Not ws.Name = WelcomePage Thenws.Visible = xlSheetVeryHidden

Next ws

Worksheets(WelcomePage).Activate

End Sub

Private Sub ShowAllSheets()

'显示除'欢迎'外的所有工作表

Dim ws As Worksheet

For Each ws In ThisWorkbook.Worksheets

If Not ws.Name = WelcomePage Thenws.Visible = xlSheetVisible

Next ws

Worksheets(WelcomePage).Visible =xlSheetVeryHidden

End Sub

说明:

1. 代码放置在ThisWorkbook代码模块中。

2. 工作簿中应该有一个名为“欢迎”的工作表,否则你要将代码前面的常量WelcomePage设置为用户没有启用宏时的提示工作表名称。

注:本文的代码整理自vbaexpress.com。

(0)

相关推荐

  • EXCEL强制启用宏的实现

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

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

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

  • 如何强制用户启用宏?

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

  • 强制用户启用宏

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

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

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

  • VBA代码库12:处理日期和时间

    excelperfect 本文中的代码来自于www.cpearson.com,特辑录于此,方便在需要时参考. 下面的过程和函数代码用于处理日期和时间. 指定年的第一个星期一 下面的函数返回指定年的第一 ...

  • VBA代码库09:增强的CELL函数和INFO函数

    excelperfect 本文介绍的自定义函数来源于wellsr.com,以Excel的CELL函数和INFO函数为样板,可直接返回工作表或工作簿的名称或工作簿路径,以及与Excel及其操作环境有关的 ...

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

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

  • VBA终极神器 代码库收藏管理 输入提示

    代码助手下载地址 https://share.weiyun.com/An8Cylu7 5.1 工具栏菜单插入代码 顶部工具栏点击对应标题可直接插入代码 如果你得代码库非常大 菜单栏加载会影响VBA启动 ...

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

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