我已经修改了不受保护的 Excel VBA 项目的代码,以便通过下面的链接与 Microsoft Project 一起使用。
但是在 MS Project 中总是有一个 Global.mpt(我的代码从这里运行)并且当下面的行执行时
projAp.VBE.CommandBars(1).FindControl(ID:=2578, recursive:=True).Execute
它始终打开 Global.mpt 文件的 VBA 项目属性。
如何选择项目计划的 VBA 项目属性? 是否有 Windows API 函数可以让我选择屏幕主机中显示的第二个 VBA 项目。选择项目后启动 FindControl 命令应该启动它对应的 VBA 项目属性(手动尝试过此操作)。
技巧是切换到“项目”窗格并“键入”项目名称的第一个字母;如果可能的话,我建议您更改默认的 VBAProject。
SendKeys "%{F11}"
SendKeys "^r"
SendKeys "V"
DoEvents
VBE.CommandBars(1).FindControl(ID:=2578, recursive:=True).Execute
projAp.VBE.CommandBars(1)。
您的代码始终与应用程序对象一起工作,因此始终在 Global.mpt 文件中查找。尝试:
ActiveProject.VBProject.VBE.CommandBars(1)
它应该只返回项目的项目。
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