我目前有一個代碼,它在啓動時檢查是否啓用了「信任訪問VBA項目對象模型」選項。在啓動時從VBA打開宏安全性
在未啓用的情況下,我需要程序打開宏安全設置以方便用戶訪問。
我做了一些代碼,不會這在大多數情況下,但我遇到一個問題,我不知道如何解決。
的代碼如下:
Private Sub Workbook_Open
If Not VBATrusted() Then
MsgBox "Trust access to the VBA project object model is not enabled" & vbNewLine & vbNewLine & _
"Please allow access by ticking the checkbox in the window that appears after clicking Ok"
Application.CommandBars.ExecuteMso ("MacroSecurity")
End If
End Sub
Function VBATrusted() As Boolean
On Error Resume Next
VBATrusted = (Application.VBE.VBProjects.Count) > 0
End Function
此代碼,它的工作,除非宏設置爲默認的「禁用與通知所有宏」,在這種情況下,我激活宏,然後得到一個運行時間錯誤「-2147467259(80004005)對象'_CommandBars'的方法'ExecuteMso'失敗」
此錯誤只會在第一次啓動時發生,因爲我不必在連續啓動時激活宏,除非我移動文件位置。
我試着暫停了兩秒鐘的宏,但是這對我沒有任何幫助,也沒有試圖抓取錯誤的錯誤處理程序,然後嘗試再次執行Application.CommandBars.ExecuteMso ("MacroSecurity")
行。它以相同的錯誤結束。
調試器告訴我的錯誤是在Application.CommandBars.ExecuteMso ("MacroSecurity")
線,但是這可能沒有太大的與該錯誤消息的驚喜。
你有沒有考慮,而不是暫停2秒,在設定的'Application.OnTime'事件觸發2秒? – CLR
過去我嘗試過這樣的事情,這並不容易 - 爲了防止惡意代碼在用戶的計算機上運行,這很困難。雖然我確信可以做到這一點,但我從未能夠自己找到可行的解決方案。 – dwirony
@dwirony在下面看到幾個解決方案:) –