以下章節提供有關 VBA 的有用資訊。 物件名稱提供方便你在 Northwind 2.0 入門版資料庫中查閱。
VBA
VBA (Visual Basic for Applications) 是所有 Microsoft 365 產品中使用的程式語言,不僅僅是 Access。 主要文件說明在這裡: Access 開發者文件。 欲開始,請參閱 《Access 程式設計導論》。
搜尋資訊時,務必尋找 Access 的具體範例,並在搜尋詞中加入 Microsoft Access。 通常,其他 Microsoft 365 產品的解決方案也能運作,但可能需要做出調整。
Microsoft Access 是一款成熟的產品。 這代表有很多範例,對你來說很棒。 這也代表你仍然可以參考較舊的 Access 程式設計書籍。 許多舊書仍可在二手書網站上以原價的一小部分購得。
可信位置與啟用內容
Microsoft Access 檔案是 Microsoft 365 檔案。 Microsoft 365 檔案必須位於受信任的地點或其內容已啟用。 這些物品被視為安全,因為是你創造的,或是來自可信賴的來源。 每次開啟任何 Microsoft 365 檔案時都會進行此檢查。 從現在起,我們將此稱為「可信/啟用」。 若新版本應用程式從非信任位置發布並開啟,啟用該內容的過程將重複。 欲了解更多資訊,請參閱 Microsoft 365 檔案的可信地點、 決定是否信任資料庫,以及 Microsoft 365 中新增、移除或變更可信位置。
巨集、函式與子程序
巨集、函式和子程序是你將商業邏輯實作到 Access 資料庫的方式。
表單 (上的控制項,如按鈕、文字框、標籤等,) 可利用其事件 (,如點擊控制) 來觸發其他程序,例如新增、刪除紀錄或開啟表單。 這些流程可以透過巨集(VBA)來實作。 Northwind 主要使用巨集,並使用一些 VBA。 欲了解更多資訊,請參閱 執行代碼巨集動作。
有些控制類型內建了自動建立巨集的精靈。 例如,在表單中新增指令按鈕會開啟精靈,提供多種功能選項。 新增組合框會開啟一個精靈,可以設定在表單上尋找特定紀錄。
瀏覽窗格
導航面板是你查看和存取所有資料庫物件的主要方式,預設顯示在存取視窗的左側。 Northwind 2.0 入門版導航面板已經過客製化。 我們創建了一個自訂分類,稱為 Northwind Starter 2.0。 這讓我們能依功能區域組織物件。 欲了解更多資訊,請參閱 「自訂導航窗格」。
範圍與能見度
你必須了解 Access 和 Microsoft 365 中的範圍與可見性。 範圍指的是變數、常數或程序可供其他程序使用的可用性。 有三個範疇層級:程序層級、私人模組層級及公共模組層級。 你在宣告變數時決定了它的作用範圍。 明確宣告所有變數是個好主意,以避免不同作用域的變數之間產生命名衝突錯誤。 所有模組都有兩個指令語句:Option Compare Database 和 Option Explicit。 欲了解更多資訊,請參閱 《了解範圍與可見性》、《 公開聲明》、《 私人聲明》、《 靜態聲明》及 《理解變數的壽命》。
持續變數
有時候你需要一個變數在產生它的物件離開作用範圍後才存在。 主要有三種方法: 公開變數、 TempVar,以及將值儲存在本地資料表中。 這些各有優缺點。 許多開發者會混合使用這些工具。
公開變數和 TempVar 是目前會話的,當應用程式關閉時會超出作用範圍。 如果你想讓使用者在他們的工作階段中保留特定的變數呢? 你可以把這類數值存到本地表格裡。 在 Northwind 2.0 入門版中,我們把這些數值放在一個叫做 SystemSettings 的表格裡。 例如,表格中的一個值是「ShowWelcome」。 這個數值告訴我們你是否想每次登入都看到歡迎畫面。
錯誤處理
如果你用過 Access 內建的任何控制精靈,你就會知道如果建立巨集,通常根本不會有錯誤處理,而如果建立了 VBA,可能只能用 MsgBox 函式, 也就是描述式。
在 Northwind 2.0 入門版中,我們實作了所謂的全域錯誤處理程式。 任何程序中發生的錯誤都會呼叫全域層級的函式來顯示錯誤。 最大優點是程式碼是一致的,如果訊息需要更改,例如顯示錯誤號碼或將錯誤記錄到檔案,只能在一個地方完成。
clsErrorHandler 是實作錯誤處理程式碼的類別模組。 類別模組將所有主功能與輔助功能整合於一個單元中,使程式碼更為封裝。 AutoExec 巨集最終會呼叫 modStartup 中的啟動函式,建立一個 clsErrorHandler 實例,並將其儲存為全域變數,方便整個應用程式使用。
事實上,程序中的錯誤處理程式碼非常一致,我們甚至能在不到五分鐘內,使用一些先進的 VBA 程式碼,為每個程序配備適當的錯誤處理程式。 此程式碼未包含在範本中。