2013-06-26 15 views
2

我正在編寫一個打開許多PI ProcessBook顯示文件的c#應用程序。 PI Processbook是一個嵌入了Visual Basic for Applications支持的程序,包括VBE環境。如何在VBE編輯器中強制中斷

我遇到的問題是,我想要打開的顯示器的數量在顯示器打開時會自動運行的宏。我已經將宏保護設置爲最大值(應完全禁用宏!),但不幸的是TypeLibrary中有一些我正在使用的東西,這意味着當以編程方式打開文件時,它會繞過宏安全性和宏運行。去圖....

因此,我試圖找到一種方法來編程地殺死這些宏,即使他們已經開始。我曾嘗試使用SendKeys.Wait(「^ {BREAK}」)強制進入休息模式。這個「有效」,但是有點碰巧:我發現如果宏在某個時候沒有暫停,SetForegroundWindow不能強制VB編輯器前臺接受sendkeys輸入。因此我嘗試使用sendmessage。我使用SPY ++查看CTRL + BREAK似乎發送WM_CANCELMODE消息到窗口。顯然,這種處理方式與字面上的ALT + Tabbing不同,或者用鼠標點擊窗口並按下CTRL + Break鍵,處理方式不同,消息排隊,但在宏完成執行前似乎沒有處理。

有沒有人有任何其他建議要嘗試?

+0

PI ProcessBlock是否有'OnDocumentOpen'(或類似的)事件? 幸運的是,該應用程序事件在顯示OnOpen事件之前觸發。 如果是這樣,您可以編輯文檔並刪除宏,如果您在文檔中找到某個「VBAProject」(或類似的)屬性。 –

+0

哦!它確實!它有一個DisplayOpen()事件。不知道如何映射一個事件處理程序,但我可以放棄它。 – ainwood

+0

您也可以嘗試以編程方式在打開任何文檔之前禁用宏。 –

回答

-1

因此,我試圖找到一種方法來編程地殺死這些宏,即使它們已經啓動。

按住Shift鍵的同時打開電子表格和宏的不會運行。

否則,你可以嘗試暫停代碼,而其運行:Ctrl + Alt + PauseBreak

編輯:

我已經設置爲最大的宏保護(這應該完全禁止 宏! )

嘗試禁用它們:

enter image description here

+0

謝謝 - 但我想這樣做pro​​gamatically。我有幾百個這樣的顯示器可以打開和處理,而且我希望這樣做「解決」。請注意,這是一個名爲「PI ProcessBook」的程序,它有一個VB編輯器 - 它實際上並不是Excel。 – ainwood

相關問題