2017-06-02 121 views
1

要求是使用Excel加載項保護帶有密碼的工作簿的VBA項目使用Excel加載項保護VBA項目

這可能嗎?

目前我們有一個Excel加載項(xlam),它可以在打開的每個工作簿上執行所有操作。 我們通過加載項實現了對工作表的鎖定。 現在我們還想保護那些打開的工作簿的VBA。下面是我們從各種論壇

With Application 
'execute the controls to lock the project 
.VBE.CommandBars("Menu Bar").Controls("Tools") _ 
    .Controls("VBAProject Properties...").Execute 
'activate protection 
.SendKeys "^{TAB}" 
'CAUTION: this either checks OR UNchecks the 
'Lock Project for Viewing checkbox, if it's already 
'been locked for viewing, then this will UNlock it\ 
.SendKeys "{ }" 
'enter password 
.SendKeys "{TAB}" & VBAProjectPassword 
'confirm password 
.SendKeys "{TAB}" & VBAProjectPassword 
'scroll down to OK key 
.SendKeys "{TAB}" 
'click OK key 
.SendKeys "{ENTER}" 
'the project is now locked - this takes effect 
'the very next time the book's opened... 
End With 

找到,但與此代碼的問題是它保護的外接本身,而不是工作簿中的VBA代碼。我們需要一些代碼或解決方法來通過將用Excel加載項編寫的代碼來保護工作簿的VBA。

回答

0

SendKeys方法只能在VBE中的任何項目處於活動狀態時執行......這可能是也可能不是外接程序項目。

的VBIDE API不公開任何編程保護VBProject,所以SendKeys的唯一途徑 - 然而,你應該關閉所有打開的窗口代碼,爲了激活宿主的工作簿,以確保你打的正確目標項目,如this ozgrid post中所述。

請注意,VBA宏保護是easily defeated,所以對於需要維護項目的VBA開發人員而言,這比對那些希望破解項目的人更煩惱:這是一種頗具象徵意義的保護,更重要的是......但是VBE插件可以解析和處理VBE中的代碼,如Rubberduck(免責聲明:我大量參與該項目)不會分析受保護的VBA項目,因此項目保護可用於提高靜態代碼分析性能。