【问题标题】:Unprotecting Microsoft Project VBA取消保护 Microsoft Project VBA
【发布时间】:2014-04-16 14:16:17
【问题描述】:

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

Unprotect VBProject from VB code

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

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

它总是打开 Global.mpt 文件的 VBA 项目属性。

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

【问题讨论】:

  • 我不确定我是否理解,但我认为您需要遍历 VBProjects 以获取正确的引用,因为您可能将 projAp 限定为 VBIDE.Project
  • @mehow 我现在尝试了:debug.Print projAp.ActiveProject.VBProject.VBE.VBProjects.Item(1).FileName C:\Users\IBM_ADMIN\AppData\Roaming\Microsoft\MS Project\14\1033\Global.mpt @987654326 @ C:\Users\IBM_ADMIN\Desktop\Project Plan v2.46.mpt projAp.VBE.VBProjects.Item(2).VBE.CommandBars(1).FindControl(ID:=2578, recursive:=True).Execute 即使我在第一个 VBA 项目属性上方的代码 sn-p 中明确选择第二个 VBAProject,也只会再次打开.

标签: vba winapi ms-project


【解决方案1】:

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

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

【讨论】:

  • 我已经尝试过了,它有效,但并非总是如此。而且我不想使用发送键,因为它们并非在所有情况下都有效。有没有其他方法可以切换到 Project Pane 并选择下一个 Project?
  • VBE 不公开任何选择/激活项目的方法。另一种方法是让您的用户寻求帮助。也许如果 SendKeys 失败,那可能是备用计划。
【解决方案2】:

projAp.VBE.CommandBars(1).

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

ActiveProject.VBProject.VBE.CommandBars(1)

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

【讨论】:

    猜你喜欢
    • 2019-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-13
    • 2021-06-06
    • 1970-01-01
    • 1970-01-01
    • 2019-03-30
    相关资源
    最近更新 更多