禁用其他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提出的方法。

但是想到两个问题:

  1. 这是“安全”吗? 有没有其他方法可以让用户编写自己的macros,即使我禁用了事件,也可以在我的活动应用程序上执行它们?

  2. 除了完全禁用事件之外是否还有其他解决方法? 这似乎有点限制,几乎“把婴儿扔出洗澡水”。

这似乎打开没有macros的文件,它是只读的。 在testing时,我甚至无法在VBA编辑器中看到打开文件的macros模块。

 Application.AutomationSecurity = msoAutomationSecurityForceDisable Workbooks.Open Filename:=strFilepath & strFilename, ReadOnly:=True Application.AutomationSecurity = msoAutomationSecurityByUI