freepiano键盘曲谱:强制用户启用宏 - 126的日志 - 网易博客

来源:百度文库 编辑:中财网 时间:2024/04/28 13:56:26

引子:好久没有更新博客了,特别是没有更新关于VBA方面的内容了,不是不想,是有太多的事要做了。但我想忙不是理由,因此以后还是要更勤劳一点,在博客中多分享一些有用的知识。
为了防止宏病毒对用户的文档产生危害,Microsoft为Office应用程序创建了一个安全模型,能够使用户选择禁用宏,以作为一个防护措施。虽然这能够在一定程序上防止宏病毒,但同时也带来了副作用,因为有很多文档中的许多功能依赖于用户已经实现的宏,如果禁用宏,那么这些功能就不可用。这个问题也一直困扰着许多VBA开发人员,因为他们开发的功能发送给用户时,如果用户禁用宏或者将宏安全级别设置为高以上,就意味着用户无法使用他们的功能,特别是那些对宏一无所知的用户。因此,很多人问:有没有办法能够去掉打开带有宏的文档时出现的警告消息而直接启用宏。
下面是一个技巧,看了之后觉得很有意思,特辑录于此。这个技巧并不能够去掉是否关于宏的安全警告消息,但能够提示用户,如果不启用宏,那么就不能够使用该工作簿。这个提示信息是通过事先在工作簿中创建的一个默认工作表(即名为“启用宏”的工作表)来实现的。

代码如下:

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                                 '保存工作簿                    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                                 Sub auto_open()                '当工作簿打开时运行AskUserEnabledMacros过程                    AskUserEnabledMacros                End Sub                                 Sub auto_close()                '隐藏除<启用宏>工作表之外的所有工作表                    RunOnClose                End Sub

打开该工作簿时,如果禁用宏,那么就只出现“启用宏”工作表,提示用户只有启用宏才能够使用该工作簿。如果启用宏,那么就会出现具体的工作表。

http://www.excelperfect.com/2010/05/06/askuserenablemacros/