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

Exa*_*rph 8 excel vba activexobject

我试图在工作簿打开时找到一种在VBA中编译代码的方法.我可以通过打开VBA环境手动执行此操作,进入Debug和"编译VBAProject",但是想知道每次工作簿打开时是否有办法通过代码执行此操作.

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

Mat*_*NNZ 12

我想你可以通过自动化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
Run Code Online (Sandbox Code Playgroud)

该对象现在将包含Visual Basic编辑器的整个命令栏.特别是,您要查找ID按钮"578",实际上是"编译VBA项目"(您可以在变量上放置一个观察者并浏览所有内部到本地窗口,您可能想要搜索其他命令).因此,总结一下:

Set compileMe = objVBECommandBar.FindControl(Type:=msoControlButton, ID:=578) 
compileMe.Execute
Run Code Online (Sandbox Code Playgroud)

这将允许编译项目.正如您所问,您只需将此内容放入此工作簿开放事件中:

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