作者:阿蕓 | 来源:互联网 | 2023-05-26 12:42
我试图在工作簿打开时找到一种在VBA中编译代码的方法.我可以通过打开VBA环境手动执行此操作,进入Debug和"编译VBAProject",但是想知道每次工作簿打开时是否有办法通过代码执行此操作.
这样做的目的是将代码加载到计算机内存中,以防止由于使用某些Active X对象而导致编译错误.如上所述,我可以手动执行此操作,但它解决了问题,因为有许多用户使用此工具并且工作簿受密码保护,并非所有用户都可以访问调试选项.
1> Matteo NNZ..:
我想你可以通过自动化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编辑器的整个命令栏.特别是,您要查找ID按钮"578",实际上是"编译VBA项目"(您可以在变量上放置一个观察者并浏览所有内部到本地窗口,您可能想要搜索其他命令).因此,总结一下:
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