2012-02-23 153 views
4

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

是否有任何方法检查用户是否在Excel中禁用VBA宏,然后使用Excel VBA代码启用宏?

回答

3

这是一项安全功能。如果你可以在VBA中的Excel中禁用它,它将失败目的。 恐怕答案是否定的,用户将需要适应他的安全设置...

您可以通过modifying the registry

+0

+1为注册表方法。我之前曾用[tag:vbs]尝试过,它在本地计算机上工作正常,但通过连接到其他计算机也可以在本地网络上执行此操作。但是,远程用户需要自行运行代码来设置宏设置,因此如果需要批准,我需要启动闪屏路由。 – brettdj 2012-02-25 00:00:48

9

这样做的标准方法是力的变化从另一个应用程序的设置用户使用启动画面启用宏。

  • 工作簿中的所有片材除了一个spash屏幕是由 非常隐蔽
  • 如果启用宏(它只能通过VBA或VBA编辑器来改变):
    1)当打开工作簿,代码取消隐藏所有这些非常隐蔽
    2)当工作簿关闭,然后将所有这些片是由非常隐蔽再次
  • 如果宏s的未启用,则用户只能看到闪屏说:“请启用宏,关闭,然后重新打开此文件”

全码两个链接,这种技术列举如下

  1. 布拉德Yundt覆盖了本here at TekTips
  2. Jonske at VBAeXpress
+2

有趣的技术 – assylias 2012-02-24 09:19:35

+3

我会选择类似上面的第一个链接,因为它使用BeforeSave。使用BeforeClose的问题在于用户可能已经做出了他们不希望保存的更改,这是通过将工作簿保存在BeforeClose事件中而被覆盖的选择,如第二个链接中那样。还有一件事是,您需要处理任何应该隐藏的表格,或者如果可能的话,它们被用户隐藏。 – 2012-02-25 19:41:09

+0

Brad Yundt的代码(上面的链接#1,页面底部)几乎可以工作,但不完全。它不能通过下面的所有6个测试用例。对于每个测试:打开文件,启用宏并进行测试。 PASS =没有奇怪的行为,文件关闭quiety。测试:(1)......什么都不做,关闭。 (2)...键入单元格,关闭,在保存提示时说NO。 (3)...键入单元格,关闭,在保存提示时说YES。 (4)...键入单元格,保存,关闭。 (5)...键入单元格,关闭,在保存提示时说取消,保存,关闭。 (6)...键入单元格,关闭,提示时取消,保存,键入另一个单元格,关闭,提示时为YES。 – 2014-02-21 03:44:14

0

有一种方法可以自动宏观使,但你需要有客户机上的完全控制至少ONC即使用数字证书并使用数字证书对其进行签名,第一次运行已签名的宏时,Excel将为您提供一个选项,以便始终信任由此签名的宏或不是。当您信任它时,所有使用您的证书签名的宏将自动启用。

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

抱歉有关错误。我的英语还不完美。 )

问候

2

这里是检查是否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