2009-07-15 82 views
2

Excel電子表格需要編程訪問其Project結構。但是,默認情況下禁用此訪問。它可以通過編程來啓用,通過在這個片段中寫入註冊表:是否啓用安全保護功能

Set wsh = CreateObject("WScript.Shell") 
'key to modify' 
str1 = "HKEY_LOCAL_MACHINE\Software\Microsoft\Office\" & Application.Version & "\Word\Security\AccessVBOM" 
'enable access' 
wsh.RegWrite str1, 1, "REG_DWORD" 
'read the vba project name' 
MsgBox Application.NormalTemplate.VBProject.Name 
'disable access' 
wsh.RegDelete str1 

雖然這是可以做到(和復位)程序,這可能會造成安全問題。

在我的項目中,它試圖修改Project結構,如果不能,則會拋出錯誤。該錯誤可以被捕獲,並且此時它可以運行該代碼段以啓用訪問或向用戶顯示錯誤消息以手動啓用訪問。通過程序啓用訪問,稍後可以禁用,還是指示用戶這樣做會更好嗎?

回答

1

好吧,有兩件事:它是衆所周知的,你可以通過註冊表修改辦公室的安全設置。所以Office通過僅在文件打開時讀取設置來繞過這一點。因此,如果您使用代碼更改設置,則還需要關閉並重新打開文件以使設置生效。其次篡改用戶安全設置將被視爲「粗魯」軟件。如果用戶想要允許你的代碼,他們會。只需提示他們啓用設置並重新啓動程序。任何過去的事情都會被視爲不良行爲。
請記住,只是因爲你可以,並不意味着你應該:)

+0

我發佈了這個問題的最佳做法標籤,因爲擔心寫作「粗魯「軟件。你提到的只有在啓動時纔讀取設置的Office可能會導致這種情況 - 它是否在打開文件或打開應用程序時檢查註冊表? – 2009-07-15 15:05:10

2

在我看來,它可以編程的事實是的一個安全問題。鑑於存在這種簡單的機制來覆蓋默認的「保護」,您不會通過關閉將用戶暴露於更大的風險。無論如何,任何值得他們的鹽的病毒作家都會這樣做。

也就是說,在您開始工作後關閉它20秒,然後再次打開時,(斷開)窗口打開的時間遠遠少於要求用戶關閉它的時間。

我會傾向於要求用戶暫時關閉它的權限,然後讓該死的確保我再次打開它(因爲將它關閉將是一個禁忌)。

+0

+1爲建議在關閉之前詢問用戶 – 2009-07-15 14:59:27