最近常看到有人問到如何讓 VBA 所發展的程式不要一值跳出詢問盒,這個部分主要是 Office 2000 以後,鑒於巨集病毒太過氾濫,所建立的認證制度,所以以下的方法,均可使用在相同安全控管的軟體上。這些說明在 MSDN 中均可找到,我只整理我喜歡的慣用做法,當然有其他方法,不過個人喜好不同,你也可以自己試試。
在介紹方法之前,有些要先說, 微軟在這部分中文譯名好像還沒統一,所以同一件事用的名詞很混餚,比如說本份文件所引用的螢幕拷貝,就同時出現憑證、認證及簽名,當然,細分還是不太一樣,比如說,簽名其實是動詞,把數位憑證簽在你的程式碼上,認證我認為應該是指上游對你憑證確認的行為,所以,對於各層級的相關用詞,我自己是統一為數位憑證。
如果你已經有其他單位發給的數位憑證,比如說內政部針對全民發的自然人憑證 IC 卡 (需透過讀卡機才能匯入電腦)、銀行、證券的網路服務等,這類憑證通常有上游單位對憑證做確認動作,更能代表是本人對程式碼簽名,有此類憑證的人建議可跳到開始替程式碼簽名閱讀,前面部分主要是先針對沒有數位憑證的人參考。同一份數位憑證在不同電腦或不同時間匯入時,會隨機產生私密金鑰,所以即使來源相同的數位憑證,在不同電腦中簽在程式碼是視為不同憑證,這部分我還沒辦法解決,所以建議暫時先都用同一台電腦進行簽憑證的工作。
首先,Office 有送一套免費的憑證產生器,但是預設是不安裝的,所以必須用新增移除方式來將此功能納入你的電腦,如下圖,將 Digital Signature for VBA Projects 安裝至你的電腦:
安裝完後,預設式裝至 Office 的目錄,下圖是 Office XP 目錄,若是其他版本,可搜尋 selfcert.exe 這個檔案。
這個檔案執行滿簡單的,點兩下執行後,就會問你要建立的名稱,當然你可以不用姓名,用暱稱也是可以,所以你要用跟我相同的名稱 "鄭子璉" 也可以,但是要記住,即是建立的是相同名稱,也會因為隨機金鑰不同,視為不同的憑證,因此你建立的憑證跟我建立的憑證會視為不同的憑證。
確定後,就會顯示建立成功。
在 VBA 編輯環境中,從選單選擇工具 -> 數位簽名。
按下選擇鈕選擇數位憑證。
我自己有滿多個有經認證的數位憑證可供測試,這邊選擇上面建立的數位憑證簽名。
選擇好以後,可以看到認證名稱已簽上 "鄭子璉"。
關掉目前的專案,比如說 Excel 後,重新開檔。第一次會問你說, 這個憑證未被信任或認證,問你是不是要信任,選擇總是信任這個來源的巨集後,以後相同的簽名,就不會再問你了。
當然,要移除憑證信任可以透過安全性選單修改,從工具 -> 巨集,就會看到下面選單。
如果懶得替每個巨集都簽上數位憑證,可以選擇中,預設值是高。
點選信任的來源,就可以看到剛剛被信任的憑證已經出現在這,若是不再信任這個憑證,可以點選移除, 移除後,除非完整清除憑證資料,否則不能再對同一個憑證信任。這部份如果需要說明,請在本人常參與的討論區提出,我會抽時間來寫。