2014-03-12 110 views
0

我已經修改了聯合國保護Excel VBA項目的代碼,以便從下面的鏈接中使用Microsoft Project。取消保護Microsoft Project VBA

Unprotect VBProject from VB code

但是在MS Project中總有一個的Global.mpt(我的代碼從這裏運行),當低於行執行

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

它總是打開全球的VBA項目屬性.mpt文件。

如何選擇我的項目計劃的VBA項目屬性? 是否有Windows API函數可讓我選擇屏幕主機中顯示的第二個VBA項目。選擇項目後啓動FindControl命令應啓動相應的VBA項目屬性(手動嘗試此操作)。

Screen Shot of Project VBA

+0

我不確定我的理解,但我認爲你需要通過VBProjects迭代來獲得正確的引用,因爲你正在將你的projAp限定爲VBIDE.Project可能 – 2014-03-12 12:34:30

+0

@mehow我現在試過了: 'debug。打印projAp.ActiveProject.VBProject.VBE.VBProjects.Item(1).FileName' _C:\ Users \ IBM_ADMIN \ AppData \ Roaming \ Microsoft \ MS Project \ 14 \ 1033 \ Global.mpt_ 'debug.Print projAp。 ActiveProject.VBProject.VBE.VBProjects.Item(2).FileName' _C:\用戶\ IBM_ADMIN \桌面\項目計劃v2.46.mpt_ 'projAp.VBE.VBProjects.Item(2).VBE.CommandBars (1).FindControl(ID:= 2578,recursive:= True).Execute' 即使我明確地選擇第二個VBAProject,如第一個VBA項目屬性上方的代碼片段中所示,只會再次打開。 – RamY

回答

1

關鍵是要切換到項目窗格和「型」項目名稱的第一個字母;如果可能的話,我建議你從默認的VBAProject中改變它。

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

我已經嘗試過這種方式,它可以工作,但並不總是如此。而且我不想使用發送密鑰,因爲它們在所有情況下都不起作用。是否有其他方式切換到項目窗格並選擇下一個項目? – RamY

+0

VBE不公開任何方法來選擇/激活項目。另一種方法是爭取用戶的幫助。也許如果SendKeys失敗了,那可能是備份計劃。 –

0

projAp.VBE.CommandBars(1)。

您的代碼始終與應用程序對象一起工作,因此始終查找Global.mpt文件。嘗試:

ActiveProject.VBProject.VBE.CommandBars(1)

應該爲項目僅返回項目。