禁用其他Excel工作表中的macros
我正在一个项目中使用Excel中的几个VBAmacros。 有没有办法确保当你通过macros打开它们时,VBAmacros不能从其他Excel工作簿中启动?
例如,假设我在一个工作簿中有一个macros来打开其他Excel文件:
Sheets("Sheet1").Select PathName = Range("D3").Value Filename = Range("D4").Value TabName = Range("D5").Value ControlFile = ActiveWorkbook.Name Workbooks.Open Filename:=PathName &; Filename
我通常做的是包含一个Application.EnableEvents = False
的子程序,以确保我没有触发代码时打开其他工作簿。 这也是这个之前SOpost提出的方法。
但是想到两个问题:
-
这是“安全”吗? 有没有其他方法可以让用户编写自己的macros,即使我禁用了事件,也可以在我的活动应用程序上执行它们?
-
除了完全禁用事件之外是否还有其他解决方法? 这似乎有点限制,几乎“把婴儿扔出洗澡水”。
这似乎打开没有macros的文件,它是只读的。 在testing时,我甚至无法在VBA编辑器中看到打开文件的macros模块。
Application.AutomationSecurity = msoAutomationSecurityForceDisable Workbooks.Open Filename:=strFilepath & strFilename, ReadOnly:=True Application.AutomationSecurity = msoAutomationSecurityByUI