分享

强制用户启用宏 - 126的日志 - 网易博客

 52EXCEL 2011-03-28

引子:好久没有更新博客了,特别是没有更新关于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./2010/05/06/askuserenablemacros/



 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多