Access VBA 基礎:為什麼打開 Access DB 後會直接進入畫面?

| Visual Basic | 3 Reads

最近在看一個舊的 Access 系統時,發現一件很像 WinForms 的事情:

一打開 .accdb,它不是先顯示資料表,而是直接打開某個業務畫面。

乍看之下,會以為 Access 裡面也有類似 WinForms 的入口程式,例如:

Sub Main()
    Application.Run(New frmMain())
End Sub

但實際上,Access 的啟動方式和普通 VB / WinForms 不太一樣。


Access 不是靠 Sub Main() 啟動畫面

在 Access 裡,整個系統通常是由:

表單 Form
巨集 Macro
查詢 Query
VBA 程式碼
資料表 Table
報表 Report

組合起來的。

所以它不像一般 WinForms 專案那樣,一定會從 Main() 進入。

Access 更常見的做法是:

打開 accdb
 ↓
Access 根據啟動設定,自動打開指定表單
 ↓
表單的 Form_Load / Form_Open 事件執行
 ↓
進入業務系統畫面

也就是說,打開 DB 後直接進入畫面,通常是 Access 的「啟動設定」在控制。


方法一:設定「啟動時顯示的表單」

最常見的方法是,在 Access 裡指定一個啟動畫面。

位置大致是:

ファイル
 → オプション
 → 現在のデータベース
 → アプリケーション オプション
 → フォームの表示

如果這裡指定了某個表單,例如:

メインメニュー

那麼每次打開這個 .accdb 時,Access 就會自動打開 メインメニュー 表單。

這個效果就很像 WinForms 裡的主畫面:

Application.Run(New frmMain())

但 Access 裡不是寫在程式入口,而是存在資料庫的啟動設定裡。

示意圖:


方法二:使用 AutoExec 巨集

Access 還有一個特殊巨集,名字叫:

AutoExec

如果資料庫裡有一個叫 AutoExec 的巨集,Access 開啟時會自動執行它。

例如 AutoExec 巨集裡可以設定:

OpenForm
フォーム名: メインメニュー

這樣 Access 啟動後,也會自動打開指定表單。

所以另一種啟動流程可能是:

打開 accdb
 ↓
執行 AutoExec 巨集
 ↓
AutoExec 打開主表單
 ↓
進入系統畫面

方法三:表單自己的事件繼續初始化

即使 Access 自動打開了主畫面,真正的初始化處理通常還會寫在表單事件裡。

常見事件包括:

Private Sub Form_Open(Cancel As Integer)
    ' 表單打開前的處理
End Sub

以及:

Private Sub Form_Load()
    ' 表單載入時的處理
End Sub

這些地方可能會做很多事情,例如:

讀取資料
設定按鈕狀態
初始化 ComboBox
檢查權限
打開其他畫面
顯示提示訊息

所以 Access 系統真正的啟動邏輯,往往不是集中在一個地方,而是分散在:

啟動設定
AutoExec 巨集
主表單事件
各按鈕 Click 事件
各查詢與報表

之中。


如何調查一個 Access DB 的啟動方式?

如果想知道某個 Access 系統是怎麼做到「一打開就進畫面」的,可以按以下順序查。

1. 按住 Shift 打開 Access DB

如果沒有被系統禁用,按住 Shift 再打開 .accdb,可以跳過啟動設定,直接進入 Access 的編輯畫面。

這樣就比較容易看到左側的物件列表。


2. 查看啟動畫面設定

進入:

ファイル
 → オプション
 → 現在のデータベース
 → フォームの表示

看這裡有沒有指定某個表單。

如果有,那個表單通常就是系統的入口畫面。


3. 查看有沒有 AutoExec 巨集

在左側導覽列中查看:

マクロ

找有沒有叫:

AutoExec

的巨集。

如果存在,打開看它是否執行了 OpenFormRunCode 或其他啟動處理。


4. 查看主表單的事件

找到主表單後,可以這樣看它的 VBA:

右鍵表單
 → デザインビュー
 → プロパティシート
 → イベント

重點查看:

開く時 / On Open
読み込み時 / On Load
クリック時 / On Click

如果事件欄位裡有 [イベント プロシージャ],點右邊的 ... 就可以跳到 VBA 程式碼。


簡單總結

Access DB 打開後直接顯示業務畫面,通常不是因為有一個明確的 Sub Main()

更常見的是下面這種結構:

Access 啟動設定
 ↓
自動打開指定 Form
 ↓
Form_Open / Form_Load 執行初始化
 ↓
使用者透過按鈕、查詢、報表操作系統

或者:

AutoExec 巨集
 ↓
OpenForm
 ↓
進入主畫面

所以在分析 Access VBA 系統時,不要一開始就去找 Main()

比較正確的調查順序是:

先查啟動設定
再查 AutoExec 巨集
再查主表單事件
最後追蹤各個按鈕的 Click 事件

Access 的程式入口不是單一入口,而是比較偏向「設定 + 事件驅動」的結構。

這也是它和普通 VB / WinForms 專案最大的差異之一。

This article was last edited at