库管易

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫描二维码登录本站

查看: 47662|回复: 33

在Excel中强制用户启用宏,打开VBA开发的Excel表格

[复制链接]
  为了防止宏病毒对用户的文档产生危害,Microsoft为Office应用程序创建了一个安全模型,能够使用户选择禁用宏,以作为一个防护措施。虽然这能够在一定程度上防止宏病毒,但同时也带来了副作用,因为有很多文档中的许多功能依赖于用户已经实现的宏,如果禁用宏,那么这些功能就不可用。

  这个问题也一直困扰着许多VBA开发人员,因为他们开发的功能发送给用户时,如果用户禁用宏或者将宏安全级别设置为高以上,就意味着用户无法使用他们的功能,特别是那些对宏一无所知的用户。因此,很多人问:有没有办法能够去掉打开带有宏的文档时出现的警告消息而直接启用宏。

  下面是一个技巧,看了之后觉得很有意思,特辑录于此。这个技巧并不能够去掉是否关于宏的安全警告消息,但能够提示用户,如果不启用宏,那么就不能够使用该工作簿。这个提示信息是通过事先在工作簿中创建的一个默认工作表(即名为“启用宏”的工作表)来实现的。

  

AskUserEnableMacros1.png

AskUserEnableMacros1.png


  上面这个就是在Excel中强制用户启用宏,打开VBA开发的Excel表格所显示的界面,具体实在的代码如下:
  1. Sub AskUserEnabledMacros()
  2.     Dim wksInfoSheet As Worksheet
  3.     Dim objSheet As Object

  4.     On Error Resume Next

  5.     '引用<启用宏>工作表并判断其是否存在
  6.     Set wksInfoSheet = ThisWorkbook.Worksheets("启用宏")
  7.     If wksInfoSheet Is Nothing Then
  8.         MsgBox "不能够找到<启用宏>工作表", vbCritical
  9.         Exit Sub
  10.     End If

  11.     '关闭屏幕更新
  12.     Application.ScreenUpdating = False

  13.     '遍历工作簿中的所有工作表并设置所有工作表可见
  14.     For Each objSheet In ThisWorkbook.Sheets
  15.         objSheet.Visible = xlSheetVisible
  16.     Next objSheet

  17.     '隐藏<启用宏>工作表
  18.     wksInfoSheet.Visible = xlSheetVeryHidden

  19.     '保存工作簿
  20.     ThisWorkbook.Saved = True

  21.     '恢复屏幕更新
  22.     Application.ScreenUpdating = True
  23. End Sub

  24. '隐藏除<启用宏>工作表之外的所有工作表
  25. Sub RunOnClose()
  26.     Dim wksInfoSheet As Worksheet
  27.     Dim objSheet As Object

  28.     On Error Resume Next

  29.     '引用<启用宏>工作表并判断其是否存在
  30.     Set wksInfoSheet = ThisWorkbook.Worksheets("启用宏")
  31.     If wksInfoSheet Is Nothing Then
  32.         MsgBox "不能够找到<启用宏>工作表", vbCritical
  33.         Exit Sub
  34.     End If

  35.     '关闭屏幕更新
  36.     Application.ScreenUpdating = False

  37.     '显示<启用宏>工作表
  38.     wksInfoSheet.Visible = xlSheetVisible

  39.     '隐藏其他工作表
  40.     For Each objSheet In ThisWorkbook.Sheets
  41.         If Not objSheet Is wksInfoSheet Then
  42.             objSheet.Visible = xlSheetVeryHidden
  43.         End If
  44.     Next objSheet

  45.     '保存工作簿
  46.     ThisWorkbook.Save
  47. End Sub

  48. Sub auto_open()
  49.     '当工作簿打开时运行AskUserEnabledMacros过程
  50.     AskUserEnabledMacros
  51. End Sub

  52. Sub auto_close()
  53.     '隐藏除<启用宏>工作表之外的所有工作表
  54.     RunOnClose
  55. End Sub
复制代码

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

使用道具 举报

谢谢。。学习了
回复 支持 1 反对 0

使用道具 举报

哈哈,还没用到那么复杂。
回复 支持 1 反对 0

使用道具 举报

         恩 是的宏的单机版是禁止启动的    讲解的很好
回复 支持 1 反对 0

使用道具 举报

谢谢楼主分享,以后会用到的
回复 支持 1 反对 0

使用道具 举报

么这些功能就不可用。

  这个问题也一直困扰着许多VBA开发人员,因为他们开发的功能发送给
回复 支持 1 反对 0

使用道具 举报

谢谢分享,以后有用
回复 支持 1 反对 0

使用道具 举报

谢谢!学习了。

回复 支持 1 反对 0

使用道具 举报

怎么 找不
不到呢
回复 支持 1 反对 0

使用道具 举报

我想建立一个半成品表单及先进先出、进出帐表单,有谁可以帮帮我呢
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|仓库管理网

GMT+8, 2024-4-25 08:17

Powered by 库管易

KuGuanYi.Com

快速回复 返回顶部 返回列表