取消对Microsoft Project VBA的保护

取消对Microsoft Project VBA的保护,vba,winapi,ms-project,Vba,Winapi,Ms Project,我已从下面的链接修改了用于取消保护Excel VBA项目的代码,以便与Microsoft Project一起使用 但在MS Project中,始终存在一个全局.mpt(我的代码从这里运行),并且当下面的行执行时 projAp.VBE.CommandBars(1).FindControl(ID:=2578, recursive:=True).Execute 它始终打开Global.mpt文件的VBA项目属性 如何选择项目计划的VBA项目属性? 是否有Windows API函数可以让我选择屏幕主

我已从下面的链接修改了用于取消保护Excel VBA项目的代码,以便与Microsoft Project一起使用

但在MS Project中,始终存在一个全局.mpt(我的代码从这里运行),并且当下面的行执行时

projAp.VBE.CommandBars(1).FindControl(ID:=2578, recursive:=True).Execute
它始终打开Global.mpt文件的VBA项目属性

如何选择项目计划的VBA项目属性? 是否有Windows API函数可以让我选择屏幕主机中显示的第二个VBA项目。选择项目后启动FindControl命令应启动相应的VBA项目属性(手动尝试此操作)


诀窍是切换到项目窗格并“键入”项目名称的第一个字母;如果可能的话,我建议您将其从默认的VBA项目更改

SendKeys "%{F11}"
SendKeys "^r"
SendKeys "V"
DoEvents
VBE.CommandBars(1).FindControl(ID:=2578, recursive:=True).Execute
projAp.VBE.commandbar(1)

您的代码总是使用应用程序对象,因此总是在Global.mpt文件中查找。尝试:

ActiveProject.VBProject.VBE.CommandBars(1)


它应该只返回项目的项目。

我不确定是否理解,但我认为您需要迭代VBProjects以获得对正确项目的引用,因为您正在将
projAp
限定为VBIDE.projectpossibly@mehow我现在尝试了:
debug.Print projAp.ActiveProject.VBProject.VBE.VBProjects.Item(1).FileName
C:\Users\IBM\u ADMIN\AppData\Roaming\Microsoft\MS Project\14\1033\Global.mpt
debug.Print projAp.ActiveProject.VBProject.VBE.VBProjects.Item(2).FileName
C:\Users\IBM\u ADMIN\Desktop\Project Plan v2.46.mpt
projAp.VBE.VBProjects.Item(2).VBE.commandbar(1).FindControl(ID:=2578,recursive:=True).Execute
即使我在第一个VBA项目属性上方的代码段中明确选择了第二个VBA项目,也只会再次打开。我尝试过这个方法,但效果不错,但并不总是如此。我不想使用发送键,因为它们在所有情况下都不起作用。是否有其他方法切换到“项目”窗格并选择下一个项目?VBE不公开任何选择/激活项目的方法。另一种方法是向用户寻求帮助。如果SendKeys失败,可能就是备份计划。