如何在同一实例中打开另一工作簿的VBA项目的属性?

如何在同一实例中打开另一工作簿的VBA项目的属性?,vba,excel,Vba,Excel,我想编写一个函数,用于为与具有此函数的workboook在同一实例中打开的工作簿解除VBA项目的保护。我试图在中修改Siddharth Rout的代码,但我不知道如何为我感兴趣的VBA项目启动特定的VBA属性窗口 作为测试,我尝试迭代实例中的VBA项目,以查看哪个项目对应于所需的工作簿,然后打开该项目的VBA属性窗口: Sub findVBProj() Dim prj As VBProject Dim correctPrj As VBProject For Each prj In

我想编写一个函数,用于为与具有此函数的workboook在同一实例中打开的工作簿解除VBA项目的保护。我试图在中修改Siddharth Rout的代码,但我不知道如何为我感兴趣的VBA项目启动特定的VBA属性窗口

作为测试,我尝试迭代实例中的VBA项目,以查看哪个项目对应于所需的工作簿,然后打开该项目的VBA属性窗口:

Sub findVBProj()    

Dim prj As VBProject
Dim correctPrj As VBProject


For Each prj In Application.VBE.VBProjects
    If prj.filename = "C:\Users\xyz\Desktop\testUnlock.xlsm" Then
        Set correctPrj = prj
    End If
Next

correctPrj.VBE.CommandBars(1).FindControl(id:=2578, recursive:=True).Execute

End Sub

但这不会启动correctPrj的VBA属性窗口,因此会触发密码提示;相反,它会打开包含findVBProj的模块的项目的属性窗口,这很有意义,因为在运行findVBProj时该模块已被选中。如何打开correctPrj的属性窗口?

正如Siddarth Rout在其接受的答案中明确指出的那样,我强调:但是,您必须确保要解除VBA保护的工作簿必须在单独的Excel实例中打开。如果要在同一实例中执行此操作,则需要类似Set的代码Application.VBE.ActiveVBProject=correctPrj。您实际上不需要单独的实例。@Rory,您测试过这个吗?我可以将ActiveVBProject设置为correctPrj,但随后.Execute打开了主工作簿的属性窗口。是的-它在2010年对我来说运行良好。我过去在2003年也使用过类似的代码