2010-07-07 204 views
7

我開發了一個使用VBA的Access應用程序。每次我打開訪問的時候,我得到如下:如何擺脫VBA安全警告

https://lh5.googleusercontent.com/wgn5B5PllVXGuG6W4_xiFa1rouSpDSn27MC0nzPkgJ5CPN8BKpAn-gDFsVS4GZtepY-c4jtbEupKeV227ogICQlzcg=s512

我必須按選項 - >啓用內容運行我的宏。這個應用程序將由幾個在工作中不太熟悉技術的人員共享。根據要求,我必須刪除它。我已經嘗試過簽署/打包數據庫,但它仍然沒有擺脫警告。

+0

從你的截圖看起來是Access 2007而不是2003或2010。 – jdw 2013-08-08 10:11:01

回答

11

爲此,您必須在「受信任的位置」中添加Excel啓動位置。

要做到這一點,請執行以下操作:

  • 在Excel選項,去信任中心,然後信任位置
  • 添加的位置。

這將必須在每臺電腦上完成。

另外,從Excel文件的角度來看,沒有辦法做到這一點,因爲這完全違背了允許用戶選擇運行VBA代碼的安全功能。

另外還有一點小貼士,如果您簽署了Excel文件,您仍然需要收件人相信您是發佈商,所以這就是您的解決方案可能無法使用的原因。

編輯:

考慮到的意見,那裏似乎是一個辦法做到這一點編程。從XpertsExchange,

爲什麼不直接從代碼設置註冊表項,而無需調用Shell?使用cRegistry類在這裏找到:

http://www.vbaccelerator.com/home/VB/Code/Libraries/Registry_and_Ini_Files/Complete_Registry_Control/article.asp

VBA代碼:

Dim c As New cRegistry 
    With c 
     .ClassKey = HKEY_CURRENT_USER 
     .SectionKey = "Software\Microsoft\Office\12.0\Access\Security\Trusted Locations\YourTrustedLocationName" 
     .ValueKey = "Path" 
     .ValueType = REG_DWORD 
     .Value = "Full path to Trusted Folder" 
    End With 

唯一需要注意的是,YourTrustedLocationname必須是唯一的......

你不得不嘗試,如果它應該是.ValueType = REG_DWORD或REG_SZ。我不確定那一個。

+0

謝謝。有沒有什麼辦法可以「嵌入」它。我沒有添加一個可信賴的位置的luxary。 – masfenix 2010-07-07 14:17:40

+1

是伴侶。否則,你會打破整個安全功能的目的。想象一下,我這樣做,打包VBA病毒併發送給你的文件。如果該文件自動執行宏而不先詢問我的話,那麼就沒有任何意義了。 – Trefex 2010-07-07 14:19:29

+0

我明白你的觀點,非常感謝你。 – masfenix 2010-07-07 14:20:39

2

讓您的宏由可信任的權威機構簽名。

+0

Access 2007不允許在.accdb,.accdr和.accde類型的數據庫文件中進行代碼簽名。 MS拿走了這個功能(並在2010年推出)。版本2007將允許在.mdb類型數據庫中對代碼進行簽名,否則它將僅允許簽署安裝包(如果最終用戶使用Access運行時並且不容易訪問添加受信任位置,則不適用)。 – jdw 2013-08-08 10:34:27

3

這是一個每用戶選項。每個人都需要'信任'你的工作簿。

在Excel中,點擊菜單按鈕,然後選擇Excel選項。在該窗口中,選擇信任中心,然後選擇信任中心設置。在該窗口中,選擇「受信任的位置」。

一旦進入該屏幕,您可能需要選中「在我的網絡上允許受信任的位置」,然後單擊添加位置並添加工作簿的網絡位置。

0

我所做的是使用visual studio 2010創建安裝項目(在設置&部署項目下)。在此項目中,您將配置爲將MS Access應用程序安裝/複製到「C:\ Ntapps \ MsOffice \ Office12 \ ACCWIZ \」。這是可信數據庫的文件夾。然後創建一個快捷方式到MS Access應用程序並將其安裝在所需的位置。

當一切正常並且安裝完成時,MS Access(默認配置)現在信任數據庫。

好運;)

Grtz,湯姆

+0

您提到的文件夾(用於Access 2007)的正常安裝默認位置是「%ProgramFiles(x86)%\ Microsoft Office \ Office12 \ ACCWIZ」。您的路徑不是標準默認路徑,並且很可能是您的安裝獨有的。請注意,如果有人想知道這是否代表安全漏洞,則此文件夾不具有無管理權限的用戶的寫入權限。 – jdw 2013-08-08 10:17:30

5

儘管這個問題歲,以防萬一它可以幫助,這裏是我做的。這對已經提出的方法是一種不同的方法,它可能會爲其他人服務。 在我的情況下,MsAccess並未直接由用戶打開。相反,MsAccess從另一個自定義應用程序中開始使用自動化。因此,我們不讓用戶點擊「啓用內容」,而是讓這個自定義應用程序告訴MsAccess啓用宏。一些與此類似:

cli = create_object("Access.Application") 
cli.AutomationSecurity = 1    # 1 = msoAutomationSecurityLow 
cli.visible = true 
cli.opencurrentdatabase("c:/Users/jmperez/AppData/Local/Temp/DB_TMP.mdb") 

(抱歉上面的代碼,它不是從「標準」或「流行」的編程語言,但它不應該是很難適應的Visual Basic或其他任何東西)

+0

這段代碼正是我想要的。我一直在尋找一種方法來打開長時間隱藏的使用應用程序對象的訪問數據庫文件。將'AutomationSecurity'屬性設置爲1是禁止信任位置警告對話框的關鍵。 – 2017-05-04 17:12:56