我正在尝试在工作簿打开时找到一种在VBA中编译代码的方法。我可以通过打开VBA环境手动执行此操作,进入Debug和“编译VBAProject”,但是想知道每次工作簿打开时是否有办法通过代码执行此操作。
这样做的目的是将代码加载到计算机内存中,以防止由于使用某些Active X对象而导致编译错误。如上所述,我可以手动执行此操作,但它解决了问题,因为有许多用户使用它并且工作簿受密码保护,并非所有用户都可以访问调试选项。
答案 0 :(得分:11)
我认为您可以通过自动化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
)。显然,您只需要执行一次(当然,在每台要执行自动编译的计算机中)。
<强> CODING:强>
您的命令栏指令(即&#34;编译VBA项目&#34;)位于Excel应用程序的VBE对象内,特别是在命令栏中:
Dim objVBECommandBar As Object
Set objVBECommandBar = Application.VBE.CommandBars
该对象现在将包含Visual Basic编辑器的整个命令栏。 特别是,您要查找ID按钮&#34; 578&#34;,实际上是&#34;编译VBA项目&#34; (你可以把一个观察者放在变量上,然后浏览所有内部进入本地窗口,你可能想要搜索其他命令)。因此,总结一下:
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