Page 1
1-1 關於 VBA
歡迎各位讀者進入 VBA 的世界,在此可藉由 VBA,將 Access 之功能發揮於極致,讓不可能的任務成真。
1-1-1 為何要學習 VBA
VBA 在 Access 中可算是「終極功能創造者」,可以說是無所不能,
任何所需功能,皆可使用 VBA,就理論而言,以下是數項使用 VBA的原因。
l 巨 集 功 能 之 不 足
巨集是 Access 資料庫自動化設計的第一步,但巨集可完成的功能
仍有限制,因為巨集僅是在 Access 提供之多項指令中,進行選擇。通常可使用滑鼠完成的設計,不論使用之工具為何,可完成的設計,
必定有限,因為無法隨心所欲,製作所需功能,因為這是「在模式內
做事」。
l 彈 性 化 設 計
這是使用 VBA 的最大目的,因為應用系統的各項功能,不可能
「寫死」。舉個很簡單的例子,就是在 Word 中輸入文字時,文字格式會立即反應在「格式」工具列中,包括使用之字體、大小、粗斜體
等,讀者可為每一文字設定分別使用不同格式,同時目前格式均會顯
示在「格式」工具列中,為什麼?因為讀者可想像 Word 背後有一個判斷格式內容的引擎,當插入點移至每一文字之後,就可取得其前一
文字的各種格式,並反應在「格式」工具列,這就是彈性運用。
在 Access 資料庫中,若在查詢內使用如「Forms![表單 1]![文字
1]」之準則,表示該查詢執行時,須由「表單 1」取得資料做為參數,這是很方便的設計,但衍伸而來的問題是此查詢就只可搭配「表單
1」,因為參數必須來自「表單 1」,若有其他位置須使用同一查詢,就須另行設計。
查詢中使用來自表單的資料做為參數之設計,與使用者操作無
關,只是設計人員在開發時,為求精簡資料庫而應有的考慮。另一設
計是不使用參數,轉而使用 VBA,傳遞參數,尤其在查詢式表單及
報表的搭配時,以 VBA 傳遞參數是常用的設計方式,請見「 Access
2000 專案開發」之說明。
l 統一的 Basic
Page 2
Basic 在 Office 家族中是統一的語言,在 Access 中,模組就是使
用 VBA,也就是 Basic。但在 Word、 Excel、 PowerPoint 等軟體中,
VBA 指的是巨集,而巨集在 Access 則另有其意義,這是 Access 與其
他 Office 系列軟體之差別。
不論如何, VBA 仍是統一的,即讀者只要在任一軟體中學會使用
VBA,就可在 Office 之 VBA 環境中,遊刃有餘,因為基本觀念及設計方式均相同。
<<說明>>
有太多非使用 VBA 不可的理由,最重要的是若資料庫僅供個人
使用,建議讀者使用精靈即可。但做為真正的應用系統,精靈是不夠
的,反過來說,精靈的製作結果通常離實用階段尚有一段距離,這段
就須使用巨集或 VBA,加以彌補及強化。
1-1-2 什麼是寫程式
寫程式一向被認為就是電腦高手,只有科班出身的人,方有學寫
程式的機會。事實並非如此,因為 Basic 程式碼很簡單,不是艱深而看不懂的程式語言。
程式的目是命令電腦,依據各行程式的敘述,逐一執行的文字,
重點就在如何命令電腦。由於必須是電腦看得懂的文字 (方可命令
它 ),所以「程式就等於是電腦語言」,另一說法是設計人員配合電腦,所有遊戲規則都是電腦所定義,無法以人的思維模式予以套用,或設
想程式「應該如何如何」。基於此,程式的每個字眼,至何處應如何
動作,使用那個敘述,皆有一定,但亦不須死記。
筆者在程式設計方面是半路出家,第一個學的語言是 ACCESS 2.0
中的 ACCESS Basic,自 Access 7.0 版起,則已改為 VBA。剛開始不
知何謂程式,只知程式是由上而下逐行執行,還好的是 Access 是可見的軟體中,精靈最多的一個。精靈代勞之後,就會產生程式碼,類
似 Excel 等軟體的錄製巨集功能,亦會自動產生程式碼。
Basic 的好處是很多字眼皆與現實生活或使用者在電腦上操作看
到的內容相似,如在 Excel VBA 中有 Worksheet,就是指工作表,
Workbook 是活頁簿;Word VBA中的 Document 指的是文件,Paragraph
指的是段落等。再如 I f 可直譯為如果, Then 可直譯為然後。多數名詞一望即知其義,可猜個大概。
當然不是每個字都可用猜的,沒關係,以滑鼠選取看不懂的字,
再按下 F1,該字的輔助說明就會顯示在螢幕上,雖然有些輔助說明
Page 3
實在直譯得不怎麼樣,有些甚至是英文的。同時不能怕英文,因為電
腦只會說及看外國話。多數入門者,在看到一堆程式後,就會視如天
書,跟我不同國而放棄,萬萬須強迫看完數行,懂了之後,會有像跨
越一座山的快感。且若是自己摸索,必定印象深刻,上課學的通常會
還給老師。此話不是鼓勵所有人皆自學程式,而是在上課之外,亦須
坐在電腦前面征服它,嚐試寫數行程式及執行它。
若要看到執行結果,最方便的方法是使用 MsgBox,這是所有 Basic通用的函數,如:
Sub Test()
MsgBox "我學會程式了 "
End Sub
將上述三行,加在 Excel 或 Access 的 Visual Basic 編輯器內,再
將游標置於其內及按下 F5 鍵,就會顯示一個對話方塊。重點是讀者在初學程式時,會想知道程式到底有無執行,因為一般程式由頭執行
至尾,不會顯示在螢幕上,MsgBox 可將其後內容顯示為對話方塊,表示它已執行,這是最立即的表現方式。
1-1-3 寫程式之前
如上所述,寫程式是「以電腦看得懂的語法,命令它」,所以寫
程式前必須有準備動作,包括了解語法及思考方式等,請見如下說明。
l 了 解 基 本 語 法
基本語法是所有 Basic 相同的部份,所以只要了解一套即可通用
於所有環境的 Basic。基本語法包括常見的 I f … Then、Do … Loop 及其
他多種不同關鍵字的組合,還好的是 Basic 基本語法大多為英文單字,由字面可大概了解其義,有關基本語法的說明,請見本書附錄。
l 關 於 物 件
這是使用 VB 或 VBA 的重點,如讀者可在 Word、 Excel、
PowerPoint、Access 等軟體中使用 VBA,相同的是基本語法,差異處
就是物件,如在 Excel VBA 中,可處理的物件就是 XLS 檔案的各式
內容,如 Workbook(活頁簿 )、Worksheet(工作表 )、Range(儲存格 )等;
在 Word VBA 則有 Document(文件 )、 Paragraph(段落 )等;在 Access
VBA 則有 Forms (表單 )、Reports(報表 )等。所以物件是在不同環境內可使用的資源,有關物件的詳細說明請見下節。
l 執 行 位 置
Page 4
寫程式之前尚須了解應寫在何處?在 Access 中,程式主要是寫在表單、報表、控制項之各個事件內,所以思考方式是「在什麼時機下,
執行我的程式」,此一時機就是事件,因為每一事件皆有其固定的啟
動時機,所以讀者亦須了解常用事件之啟動時機,方可在正確位置執
行所需動作。
<<說明>>
以上是第一次寫程式前的準備動作,總之一切遊戲規則均是
Access 所定義,設計人員須了解在 Access 內有那些資源。
1-1-4 開始寫程式
一切均確定及了解後,即可開始寫程式。這是對初學者而言,可
說是極難入手的動作。綜合以上所述,試舉一例,就是「假設表單中
有單價、數量、小計等三個文字方塊,如何設計輸入單價及數量後,
立即顯示小計」。以下是分析此功能及寫程式的步驟:
l 確 定 執 行 位 置
在本例中,使用者可在「單價」及「數量」內輸入數字,而計算
依據即為輸入之數字,所以讀者須知道那一個事件會更改事件後立即
執行,就是兩個文字方塊的 AfterUpdate,這個事件會發生在更改資料及插入點離開時,所以這個事件通常用來「檢查及取得資料」之用。
但若是表單的 AfterUpdate 事件,就會發生在儲存記錄之後。
衍伸而來的差別是文字方塊的 AfterUpdate 發生時,並未儲存檔
案,僅是更改資料,表單的 AfterUpdate 事件則只會發生在已儲存記錄之後
l 撰 寫 程 式
接下來是撰寫程式,但首先須找到正確位置,讀者可開啟「單價」
文字方塊的屬性表,切換至「AfterUpdate」,按下 按鈕,再於清單
中選取「 [事件程序 ]」,如圖 1-1:
Page 5
圖 1-1 在 AfterUpdate 事件使用 VBA
如圖 1-1 所示,所有事件屬性的清單會顯示現用資料庫的所有巨
集及一個「事件程序」,若為後者,表示將在事件中使用 VBA。指定
「事件程序」後,再按下 按鈕,即可開啟 Visual Basic 編輯器,同
時插入點會停留在「單價 _AfterUpdate」程序中,如圖 1-2:
圖 1-2 在事件程序撰寫程式
圖 1-2 之狀態是插入點在「單價_AfterUpdate」程序內,這就是「單
價」文字方塊的「 AfterUpdate」事件程序,並可立即輸入程式。
在本例中,目的是執行相乘,乘法符號在程式內是「*」號,而
在程式內取得文字方塊資料的語法是「 Me![單價 ]」,其中「Me」是執
行此段程式的表單或報表,「單價」則是控制項名稱,所以「Me![控
制項名稱 ]」就是在程式內取得目前表單內,某控制項所含資料的標準語法。本例程式可以是如下內容:
Sub 單價_AfterUpdate()
Me![合計 ]=Me![單價 ] * Me![數量 ]
End Sub
l 避 免 錯 誤 的 設 計
但如上程式的設計還不夠,因為使用者可能在「單價」及「數量」
輸入空白或非數字,空白在程式內之語法是 Null,這是較特殊的資
料,它像病毒一樣,若運算式中有任一者為 Null,則結果也會是 Null,因為它會傳染。故應有設計如下:
Sub 單價_AfterUpdate()
If IsNumeric(Me![單價 ])=True And IsNumeric(Me![數量 ]) Then
Page 6
Me![合計 ]=Me![單價 ] * Me![數量 ]
End If
End Sub
在以上程式中,使用「 IsNumeric」函數判斷「單價」及「數量」
欄位之值是否為數字,若是方執行計算。由於 Null 不是數字,故是
否為 Null 之判斷不須另行設計,若要判斷是否為 Null,可使用 IsNull函數。
使用程式的目的是自動化處理,但大多數的自動化設計,均會因
自動化而有其他考慮。以本例而言,使用者可在「單價」及「數字」
等欄位輸入資料,並以此做為程式計算依據,所以計算前須先確定輸
入資料是否正確。只要是使用者可手動輸入之資料,均有可能錯誤,
為確保執行無誤,必須先行檢查。
l 其 他 設 計
在以上說明的例子,僅是簡單的乘法運算,目的是計算「合計」,
所以在表單上的「合計」文字方塊,即應不允許使用者輸入資料,因
其值是由程式計算而來,故須將「鎖定」屬性設為「是」。
<<說明>>
以上是基於一個使用目的,撰寫程式的步驟及應有考慮。對初學
者而言,較難是找到寫程式的正確位置及防止錯誤的設計,二者均須
靠經驗。所以寫程式的目的是達到自動化處理,但除此之外,尚有許
多相關 KNOW-HOW,一般而言,以上就是撰寫程式的流程,只不過在不同目的之下,會有不同的考慮及設計。
Page 7
1-2 VB 家族
VBA 的全名是「Visual Basic for Applications」,基本語法就是
Basic 的形式,在微軟的各式軟體中,可說學會 Basic 後,就可一招
半式闖江湖,因為同樣的語法可使用在多個位置及環境,而 Basic 也是所有程式語言中,最簡單且最易自學者。
1-2-1 Visaual Basic
這是 Basic 的最早期成員,目的是開發可在任何電腦執行的應用
程式,目前 (1999 年底 )最新版本為 6.0,其特色是可編譯為 EXE 檔,
這也是 Visual Basic 與其他 Basic 的最大差別。
Visual Basic 的可處理範圍相當廣泛,包括資料庫、製作 OCX 檔
案等,有關資料庫的部份可參考「VB 6.0 與資料庫開發聖經」一書,
如圖 1-3 是 Visual Basic 的設計視窗
圖 1-3 Visual Basic 之專案
在圖 1-3 中,目前正顯示此專案的表單,「表單」可以是對話方塊或最大化的視窗,左方是工具箱、右方則是專案總管及屬性表。
圖 1-3 顯示的是設計模式時之表單,若要撰寫程式,可在所需位置按兩下左鍵,如要為「確定」按鈕定義功能,可在此按鈕上按兩下
Page 8
左鍵,即會進入此按鈕的 Click 事件。
1-2-2 VBA
這是可使用在 Office 各軟體的 Basic 版本,也是本書討論主題。
由於 VBA 是附屬於各軟體,所以 VBA 的任務是強化應用系統,此處
的應用系統不是可單獨執行的 EXE 檔,而是 Office 各軟體的檔案,
如在 Word 中,VBA 程式碼是附屬於 DOC 檔案、在 Excel為 XLS 檔
案、在 Access 為 MDB 檔案等。所以 VBA 程式碼必定在各個檔案內,
而編輯 VBA 程式碼的工具是 Visual Basic 編輯器,如圖 1-4:
圖 1-4 Visual Basic 編輯器
筆者是在 Access 中使用「工具」→「巨集」→「Visual Basic 編
輯器」選項,開啟圖 1-4。
圖 1-4 共有三個部份,分別是專案總管、屬性表及程式碼,專案
總管會顯示現用資料庫中,所有已使用 VBA 的表單、報表,再加上模組等,在專案總管之任一物件上按兩下左鍵,即可開啟其程式碼視
窗。
1-2-3 VBScript
這是使用在網頁中的 Basic,如 Access 2000 的資料頁,就可使用
VBScript。此類程式的特性是會隨網頁下載至提出要求的瀏覽器中,
Page 9
所以 VBScript 會在前端執行,這也是資料頁結合資料庫的原理,一切均以前端為處理中心。
所以在瀏覽器中,就可查看 VBScript 程式碼,如圖 1-5:
圖 1-5 使用 VBScrpit 程式碼
圖 1-5 是 FrontPage 2000 的 HTML編輯視窗,在程式碼中,由
「<script」及「</script>」標記間的文字即為 VBScript 程式碼。圖
1-5 共有兩個程序,分別是 AfterUpdate 及 check,此二者分別在不同
時機予以啟動,如圖 1-6:
Page 10
圖 1-6 執行 VBScript 程式
圖 1-6 之選取部份,目的即為執行 AfterUpdate 程序。此處是一個文字方塊,表示使用者在文字方塊內輸入完資料及游標離開後,立即
執行 AfterUpdate 程序。
<<說明>>
VBScript 是專用於前端網頁的 Basic 程式,正確說法是 DHTML(D
是動態之意 ),可在網頁製作立即互動之效果。
1-2-4 ASP
ASP 與 VBScript 剛好相反,ASP 是在伺服器執行的程式,所以在
瀏覽器提出請求時,ASP 會在伺服器內處理請求,再將結果傳送至瀏
覽器,在瀏覽器也看不到 ASP 程式碼,如圖 1-7:
Page 11
圖 1-7 使用 ASP
圖 1-7 也是 FrontPage 2000 的 HTML 編輯視窗,由「 <%」至「%>」
標記間的內容即為 ASP 程式碼。
ASP 的主要目的是在網頁中處理資料庫,而資料庫則是置於伺服
器內,如 Access 應用推廣中心 (http://access.winwalk.com.tw)網站即
使用相當多的 ASP 應用。
<<結論>>
以上就是 VB 家族各成員的簡介,由於 Basic 語法並不難,所以
在各個環境中,多已成為標準程式語言。
Page 12
1-3 物件的觀念
在目前的設計環境中,物件的觀念相當重要,澈底了解何謂物件
後,可節省摸索時間。
1-3-1 何謂物件
稍早曾說明,各種不同環境的 Basic 基本語法皆相同,差異處就
是可用物件不同,物件可視為不同 Basic 環境中,提供的資源,設計人員可使用這些物件,建立或組合應用系統。所以筆者曾以積木做為
比喻,就是每一開發環境提供的資源,就像一個個形狀不同的積木,
設計人員再以這些積木,進行組合,如同蓋房子般。
以 Access VBA 為例,目的是控制 mdb 檔案的各式內容,所以在
Access VBA 中,可使用的物件就是資料表、查詢、表單、報表等,但這只是較大的分類,細分之下,如欄位、表單或報表中的控制項等,
也是物件。
可見的物件
可見及不可見物件是非正式的分法,之所以如此分類的原因是對
多數初學者而言,「物件」是最難懂的概念,筆者認為以可見及不可
見為分類,是了解物件的第一步。
若在 Access 資料庫內,可見物件主要就是表單、報表及控制項
等;若在 Excel 中,活頁簿的每一張工作表、工作表中的每一儲存格
等亦皆是物件;在 Word 中,每份文件、文件中的每個段落等,亦皆是物件。
這些「可見」物件的特性是皆會顯示在螢幕上,所以一般使用者
在螢幕的操作,在系統背後,皆是以物件的原理在動作。
若在 Access 中,表單、報表、控制項等的另兩個特性是可被選取
及顯示屬性表,如圖 1-8:
Page 13
圖 1-7 使用屬性表
圖 1-7 的狀態是在表單設計視窗選取文字方塊,同時顯示此文字方塊的屬性表,只要是物件,就會有屬性表,所以表單及報表本身、
區段、控制項等皆有屬性表,有關屬性表的意義稍後會詳細說明。
若是在 Word 中,也有屬性表,操作方式是先使用「檢視」→「工
具列」→「控制工具箱」選項,再按下 及 按鈕,如圖 1-8:
Page 14
圖 1-8 在 Word 中開啟屬性表
如圖 1-8 所示即為 Word 文件之屬性表,只不過此屬性表內容全
為英文,不像 Access 已完全中文化,這是因為 Access 較常做為開發
工具,而 Word 僅是做為一般應用,較少使用 Word 開發應用系統。
在 Access 之表單或報表設計視窗中,只要是可被選取者,皆是物件,這些是可使用滑鼠,改變其工作狀態的可見物件。
不可見的物件
這些物件大多僅存在於程式內,筆者歸類為「不可見」的原因是
此類物件無法使用滑鼠進行操作,也不會顯示在螢幕上,而是在記憶
體內,程式的大部份處理皆是在記憶體內進行,少數動作可立即更新
至螢幕。
在程式中,物件的內容可有相當多種,分述如後:
l 內 建 物 件:此類物件指的是工具提供的各式物件,如在 Access VBA
內,此類物件通稱為「Microsoft Access」物件,其內容代表目前
已啟動的 Access 環境中,所含有的各式內容,如 Application物件
代表 Access、Forms 代表所有已開啟的表單、Reports 代表所有已
開啟的報表等。如在 Excel VBA 內,就會有代表活頁簿的
Workbook、代表工作表的 Worksheet 等。
l 物 件 變 數:這是變數的多種變化之一,被宣告為物件變數後,就
Page 15
可在程式內取得物件內容,如圖 1-9:
圖 1-9 宣告及使用物件變數
在圖 1-9 中,首先使用「Dim」語法,宣告變數 gk 為物件變數,
且型態為 Recordset,第二行即以 Set 語法,取得變數 gk 的內容。
Recordset 之意是記錄集,所以圖 1-9 的第二行,就等於以滑鼠在查詢或資料表上按兩下左鍵後,開啟及顯示在螢幕上的多筆記錄。只
不過在程式中取得的記錄集,僅存在於記憶體內,不會顯示在螢幕上。
物件變數有型態之分,如圖 1-9 之變數 gk 是 Recordset 型態,同時宣告之後,物件內容不可以是其他型態。
l 參 照 程 式 庫:讀者可在 Visual Basic 編輯器內使用「工具」→「設
定引用項目」選項,在此可指定參照之程式庫,如圖 1-10:
Page 16
圖 1-10 引用程式庫
如圖 1-10 所示,表示現用資料庫引用了多個程式庫,其中前四個
為建立新資料庫後,自動引用的程式庫,只 Outlook 9.0(也就是
Outlook 2000)是筆者指定,引用之後,即可在程式內宣告及取得
Outlook 提供的物件,如圖 1-11:
圖 1-11 宣告及取得引用之物件
在圖 1- 11中,使用 Public 語法,宣告兩個變數,型態分別為 Outlook
的 Application、Outlook 的 NameSpace,其中 Application及 NameSpace
皆為 Outloo k 程式庫提供的物件,只有在引用之後方可使用。
<<說明>>
本小節說明的是只可在程式中處理的物件,也算是物件的來源,
其實物件都是由程式庫所提供,也就是圖 1-10 中,含有「 ü」符號者,
只不過在 Access 環境中,有部份程式庫是預設引用,所以不須再使
用圖 1-10。
重點是設計人員必須了解在程式中,可引用那些物件,方可設計
最適用的應用系統,因為現在的設計環境,就是使用物件,「堆積」
及「組合」應用系統。有關不同物件的來源,本書稍後將有詳細說明。
1-3-2 物件的數項重點
「物件」是可在程式及表單、報表設計視窗使用的資源,每一物
件皆可視為獨立的個體,以下說明有關物件的數項重點,這些重點不
止適用於 Access VBA,其他 Basic 環境亦均適用。
Page 17
上下隸屬關係
如上所述,物件皆是獨立的個體,每一程式庫針對每一物件的定
義,皆是上下隸屬關係,以 Access VBA 為例,最上層物件是
Application,其次是 Forms、Reports …等,如圖 1-12:
圖 1-12 Access 物件關係圖
圖 1-12 是由 Access 之輔助說明中,簡化而來,Application之下
又有二十種物件,有些物件尚有下一層,每一物件均代表目前 Access
環境的內容,如 Screen是螢幕、 Docmd 是巨集指令、CommandBars
是工具列及功能表等。由於這些物件均是在 Access 啟動之後,方會
顯示或處於可使用狀態,所以均歸類在 Application 物件之下。以表單為例,在表單設計視窗中,每一控制項亦均是物件,但由於控制項
是置於表單內,所以表單在此時,也是其下控制項的「容器」。
讀者可以「容器」的概念,設想物件的上下隸屬關係,即除了最
上層外,其下物件均是「置於容器」內,而「容器」則是上層物件。
筆者常以書櫃及書等兩個物件為例,書可置於書櫃內,所以此時的書
櫃對書而言,是為「容器」,因為書是放在書櫃內,所以取書時,必
由書櫃中取出。以下針對物件的重點說明,均將以書及書櫃為例。
群體的觀念
群體其實就是「容器」,「群體」一詞有多數之意,表示有多個物
Page 18
件,如 Forms 表示所有已開啟的表單,每一表單均置於 Forms 群體中,
由於是複數,故字尾加上 s,如圖 1-12 有多個字尾加 s 者,即皆為群體。
再以書及書櫃為例,對「書」這個物件而言,群體就是 Books,
每一本書皆是 Book 物件,取書時,是由 Books 中取出。回至 Forms之例子,取得及參照個別表單的語法是:
Forms(“表單 1”).Visible=True
Forms(0).Visible=True
以上兩種語法是所有物件導向程式設計中,取用物件的共通語
法,二者差別是分別使用名稱及索引值 (括號內 ),做為參照依據,索
引值是以物件建立或開啟的順序,由系統予以自動編號,由 0 開始至無限大之值,但通常會使用名稱。
<<說明>>
所以群體是多個物件的集合,容器內可含有一或多個物件,但有
些物件無法量化,永遠只有一個,如 Application 或圖 1-12 中,字尾
沒有 s 者。
物件名稱
圖 1-12 是物件的分類,但在執行時,可能會有多個物件,如 Forms代表所有已開啟的表單,所以可能會有多個表單同時執行,此時每一
表單均為一個 Form 物件,為便於識別,每一物件均有名稱,如表單即為表單名稱,且同類型物件的名稱不可相同,否則將造成混淆。
名稱也是設計應用系統時,不論在設計視窗或程式內,引用物件
的必要條件,如在表單設計視窗內,可使用多個控制項,每一控制項
亦均為物件,所以一個表單擁有的多個控制項,其名稱不可相同,如
圖 1-13:
Page 19
圖 1-13 查看控制項名稱
圖 1-13 的狀態是在表單設計視窗中,開啟「物件」清單,此清單會顯示目前表單的所有控制項名稱,選取任一者後,即會自動選取該
物件。如此圖的「物件」清單現顯示為「指令 10」,此按鈕即在被選取狀態,也就是「關閉」按鈕。
圖 1-13 是在表單設計視窗的例子,若在程式中,每一物件亦有其名稱,總之大原則是同一容器內的多個同類型物件,不可同名,就像
每人都有不同的身份證編號,設計人員亦須了解如何由名稱取得物
件,方可在程式內遊刃有餘。
屬性及方法
這是物件各項重點中的重點,也是初學者最不易了解之處。概括
而言,屬性是「靜態規格」,方法是「動態操作」。屬性就是屬性表中
的各個項目,但若是在程式中,由於是不可見物件,所以沒有屬性表。
嚴格而言,屬性表是為方便在表單及報表的設計作業,而提供的工
具,方法則不會顯示在屬性表中,只可使用在程式中。
再以「書」物件為例,其書名、頁數、作者、出版社等,皆可視
為屬性,因為這些均是「書」物件的規格,是成為一本「書」的基本
Page 20
要件。所以讀者可在表單中為各個控制項及表單本身,更改屬性,目
的是「定義工作時的初始狀態」,但這只是初始狀態,執行階段仍可
以程式更改屬性,使應用系統更為靈活,如表單及每一控制項均有
Visible(看得見 )屬性,其值為 True 或 False,預設值為前者,表示執
行時將顯示在螢幕上,也可以程式改為 False,就可隱藏。
方法則是動態操作,目的是改變物件的目前狀態,如以「書」物
件為例,由書櫃取書、翻書等皆可視為方法,因為「書」物件的狀態
及位置已因執行這些方法而更改。如將插入點移入某文字方塊內,在
程式內就必須使用 SetFocus 方法,如:
Forms(“表單 1”)![文字 1].SetFocus
不同類型的物件有數量不等的屬性及方法,若是表單、報表及控
制項等,大部份屬性皆會顯示在屬性表中,也有一些是只可使用在程
式的屬性,如表單有 Dirty 屬性,此屬性可判斷目前記錄是否已更改
(True 或 False),但此屬性不會顯示在屬性表中。
最後要說明的是如何在程式中使用屬性及方法,在 Visual Basic
編輯器內,只要輸入物件及按下「 .」符號,即可顯示該物件的所有
屬性及方法,如圖 1-14:
圖 1-14 顯示所有屬性及方法
圖 1-14 的狀態是輸入「Me![指令 6].」之後顯示的下拉式清單,
其中「Me」表示執行此段程式的表單或報表,「指令 6」是控制項名
稱,由於控制項也是物件,所以輸入至「 .」符號後,即會顯示清單,內容就是該物件的所有屬性及方法, 圖示為屬性, 為方法。此時
讀者只可在清單內選取所需屬性或方法,不可以清單以外的內容,否
則將發生錯誤。
<<結論>>
本節說明的是物件各項觀念及重點,若讀者是 VBA 初學者,務
須了解物件,其實在日常生活中,很多經驗皆可套用物件的觀念,只
Page 21
不過在程式中,有些物件不會顯示在螢幕上,只會存在於記憶體內。
了解物件後,方可在後續各章進入 VBA 的世界。