我可以在打开的工作簿上编译VBA吗?

我正在试图find一种在VBA上打开工作簿的代码编译方法。 我可以通过打开VBA环境,进入Debug和“Compile VBAProject”来手动执行此操作,但是想知道是否有办法通过代码在每次打开工作簿时执行此操作。

这样做的目的是将代码加载到计算机内存中,以防止由于使用某些Active X对象而导致的编译错误。 如上所述,我可以手动执行此操作,但可以解决此问题,因为有许多用户使用这个工作簿并且受密码保护,所以并不是所有用户都可以访问debugging选项。

我想你可能会尝试通过自动VBE(Visual Basic编辑器)来做到这一点。

要求

你需要到Excel / File / Options / Trust Center / Trust Center settings并检查选项Trust access to the VBA project object model (出于安全原因,这是默认情况下,停用,如果你不检查它下面的代码会提高运行时错误1004 programmatic access to visual basic project is not trusted )。 很明显,你只需要做一次这样的操作(当然每台计算机都要执行自动编译)。

编码:

您的命令栏指令(即“编译VBA项目”)位于Excel应用程序的VBE对象内部,特别是在命令栏中:

 Dim objVBECommandBar As Object Set objVBECommandBar = Application.VBE.CommandBars 

该对象现在将包含Visual Basic编辑器的整个命令栏。 特别是,你在寻找IDbutton“578”,这实际上是“编译VBA项目”(你可以把一个观察者放在variables上,浏览所有的内部到本地窗口中,你可能想要search其他的命令)。 因此,总结一下:

 Set compileMe = objVBECommandBar.FindControl(Type:=msoControlButton, ID:=578) compileMe.Execute 

这将允许编译项目。 正如您所问,您只需将其放入“此工作簿”公开活动:

 Private Sub ThisWorkbook_Open() Set compileMe = objVBECommandBar.FindControl(Type:=msoControlButton, ID:=578) compileMe.Execute 'the project should hence be compiled End Sub