强制用户启用宏

有时,必须确保用户在打开工作簿时启用宏,否则就不能实现工作簿的效果。由于无法使用宏去打开宏,因此需要一种确保用户启用宏的技术。下面讲解的方法隐藏除“欢迎”工作表(告诉用户启用宏)之外的所有工作表,并在每次保存工作簿时强制执行该工作表。如果用户在启用了宏的情况下打开工作簿,则宏将不会隐藏所有工作表。还可以使用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设置为用户没有启用宏时的提示工作表名称。

在《VBA一段代码库10 :强制用户可视宏》中,讲解了用户在打开工作簿时必须可视化宏才能使用工作簿功能的代码。本文给出了一段同样可以强制用户使用宏的代码。

如果用户没有启用宏,那么当打开工作簿时,一个特定的工作表将提示用户可以宏,而工作簿中的其他工作表则被隐藏。

代码如下:

私有子工作簿_Open()

有申请

'禁用ESC键

.EnableCancelKey = xlDisabled

.ScreenUpdating = 假

调用取消隐藏表格

.ScreenUpdating = 真

'重新启用ESC键

.EnableCancelKey = xlInterrupt

结束于

结束子

私有子 UnhideSheets()

变暗表作为对象

对于 Sheets 中的每个 Sheet

If Not Sheet.Name = "提示" Then

Sheet.Visible = xlSheetVisible

万一

下一个

Sheets("提示").Visible = xlSheetVeryHidden

'Application.Goto Worksheets(1).[A1], True '<任选的

设置表 = 无

ActiveWorkbook.Saved = True

结束子

Private Sub Workbook_BeforeClose(Cancel As Boolean)

有申请

.EnableCancelKey = xlDisabled

.ScreenUpdating = 假

调用隐藏表

.ScreenUpdating = 真

.EnableCancelKey = xlInterrupt

结束于

结束子

私人子隐藏表()

Dim Sheet As Object '<包括工作表和图表工作表

With Sheets("提示")

'工作表的隐藏构成了一种变化,这种变化产生了

'自动的“保存?”提示,所以如果工作簿已经

'在此之前被保存,然后下一行和前几行

“与下面的[A100]有关,绕过'保存? ’对话...

If ThisWorkbook.Saved = True Then.[A100] = "Saved"

.Visible = xlSheetVisible

对于 Sheets 中的每个 Sheet

If Not Sheet.Name = "提示" Then

Sheet.Visible =xlSheetVeryHidden

万一

下一个

如果 .[A100] = "已保存" 那么

.[A100].清除内容

此工作簿.保存

万一

设置表 = 无

结束于

结束子

(0)

相关推荐

  • 用列信息批量生成工作表,看这篇就够了

    ▎写在前面 本文通过一个简单的案例,详细讲解批量生成多个工作表的VBA需求,并考虑可能出现的一些问题,加深对If条件判断的使用.新手建议一步一步根据文章内容进行测试. ▎案例需求 实际需求模拟如下: ...

  • EXCEL强制启用宏的实现

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

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

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

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

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

  • 如何强制用户启用宏?

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

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

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

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

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

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

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

  • 慕尼黑高等法院:脸书强制用户使用真实姓名合法

    公告:因企鹅审核规定,本公众号从<德国IT那些事>更名为<欧盟IT那些事>. 如果用户在Facebook上不使用真实姓名,则可能会被平台封账号.慕尼黑高等地区法院裁决,Face ...

  • Excel如何启用宏 宏被禁用如何设置 视频教程

    Excel如何启用宏 宏被禁用如何设置 视频教程