取消保护 Microsoft Project VBA

问题描述 投票:0回答:3

我已经修改了不受保护的 Excel VBA 项目的代码,以便通过下面的链接与 Microsoft Project 一起使用。

取消对 VBProject 的 VB 代码保护

但是在 MS Project 中总是有一个 Global.mpt(我的代码从这里运行)并且当下面的行执行时

projAp.VBE.CommandBars(1).FindControl(ID:=2578, recursive:=True).Execute

它始终打开 Global.mpt 文件的 VBA 项目属性。

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

Screen Shot of Project VBA

vba winapi ms-project
3个回答
1
投票

技巧是切换到“项目”窗格并“键入”项目名称的第一个字母;如果可能的话,我建议您更改默认的 VBAProject。

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

0
投票

projAp.VBE.CommandBars(1)。

您的代码始终与应用程序对象一起工作,因此始终在 Global.mpt 文件中查找。尝试:

ActiveProject.VBProject.VBE.CommandBars(1)

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


0
投票
Sub UnprotectVBProj(fileName As String, modulePath As String, moduleName As String)
Dim Pwd As String
Dim vbProj As Object

Dim vbComp As Object



Set vbProj = Workbooks.Open(fileName).VBProject




If vbProj.Protection = 1 Then  ' already unprotected
Set Application.VBE.ActiveVBProject = vbProj
Application.Wait (Now + TimeValue("0:00:01"))
SendKeys "Planet282{(}{)}" & "{ENTER}" & "{ENTER}"




Application.VBE.CommandBars(1).FindControl(ID:=2578, recursive:=True).Execute
Application.Wait (Now + TimeValue("0:00:01"))

MsgBox ActiveWorkbook.Name
Application.Wait (Now + TimeValue("0:00:01"))
 Application.VBE.MainWindow.Visible = True
Set vbComp = Application.VBE.ActiveVBProject.VBComponents.Import(modulePath)
vbComp.Name = moduleName
ActiveWorkbook.Save
Application.Wait (Now + TimeValue("0:00:01"))
ActiveWorkbook.Close




End If



End Sub


'i did some like this which will add the modules
© www.soinside.com 2019 - 2024. All rights reserved.