Excel VBA:启用宏设置

时间:2012-02-23 21:44:56

标签: excel excel-vba vba

我写了一个宏方法,在打开工作表时自动调整Excel工作表中的列。但是,如果用户未在Excel中启用宏,则此解决方案不起作用。

有没有办法检查用户是否在Excel中禁用了VBA宏,然后使用Excel VBA代码启用宏?

4 个答案:

答案 0 :(得分:12)

执行此操作的标准方法是强制用户使用启动画面启用宏。

  • 制作除了spash屏幕之外的工作簿中的所有工作表 非常隐藏(只能通过VBA或VBA编辑器进行更改)
  • 如果启用了宏:
    1)当工作簿打开时,代码会取消隐藏所有这些非常隐藏的表单 2)当工作簿关闭时,所有这些工作表再次非常隐藏
  • 如果未启用宏,则用户只能看到启动画面说“请启用宏,关闭然后重新打开此文件”

下面列出了两种具有此技术完整代码的链接

  1. Brad Yundt介绍了此here at TekTips
  2. Jonske at VBAeXpress

答案 1 :(得分:3)

这是一项安全功能。如果你可以在vba中在Excel中禁用它,它将失败目的。 我担心答案是否定的,用户需要调整他的安全设置......

您可以按modifying the registry

更改其他应用程序的设置

答案 2 :(得分:3)

这是另一种检查是否启用VBA而无需隐藏/显示工作表的方法。隐藏/取消隐藏工作表的问题是工作表可以保存在"已启用"状态,关闭而不保存,然后重新打开,不显示警告。

在模块(不是工作表或工作簿宏)中创建以下函数:

Public Function MacrosEnabled()
    MacrosEnabled = True
End Function

现在,在您要显示有关是否启用宏的通知的任何单元格中,输入以下等式:

=IF(ISERROR(MacrosEnabled()&NOW()),"Macros are disabled","Macros are enabled")

如果您只使用ISERROR(MacrosEnabled()),则每次打开电子表格时都不会重新计算该值。通过连接NOW(),每次打开电子表格时都会读取当前时间,因此将重新计算单元格的值。我广泛测试了这种方法,它似乎非常可靠地表明是否启用了宏。

如果禁用了宏,则可以应用条件格式来执行许多操作:

  • 突出显示明亮颜色的复选单元格,并且可能会更改"宏被禁用"文本以包含有关如何启用宏的说明。

  • "隐藏"通过将文本颜色和背景颜色设置为相同来确定其值取决于宏的单元格。

Here is a spreadsheet that demonstrates this method

答案 3 :(得分:0)

有一种方法可以自动执行宏,但您需要至少对客户端计算机进行一次完全控制。使用数字证书并使用它对宏进行签名,第一次运行签名的宏时,Excel将为您提供始终信任由此签名的宏的选项。当您信任它时,将自动启用使用您的证书签名的所有宏。

这是在公司网络上开发和管理宏的最佳选择。

对错误感到抱歉。我的英语还不完美。 ;)

此致