張 旭
(武漢工程職業(yè)技術(shù)學(xué)院 湖北 武漢:430080)
利用Excel VBA設(shè)計(jì)制作應(yīng)用程序窗體
張 旭
(武漢工程職業(yè)技術(shù)學(xué)院 湖北 武漢:430080)
利用Excel VBA可以設(shè)計(jì)制作功能強(qiáng)大、性能優(yōu)良的應(yīng)用程序窗體,能夠滿足用戶不同類型的應(yīng)用需求,也能夠使應(yīng)用程序的操作更為簡單、界面更加美觀清晰和友好。
VBA;ADO;數(shù)據(jù)庫;窗體
訪問的目標(biāo)數(shù)據(jù)庫是一個(gè)名為“房產(chǎn)”的SQL Server應(yīng)用數(shù)據(jù)庫。假設(shè):“房產(chǎn)”應(yīng)用數(shù)據(jù)庫是由單位、員工、房屋、購房等四個(gè)表所組成的,其數(shù)據(jù)庫關(guān)系結(jié)構(gòu)圖如圖1所示。
圖1 “房產(chǎn)”數(shù)據(jù)庫結(jié)構(gòu)
為了描述方便,假設(shè)要設(shè)計(jì)編制的應(yīng)用程序窗體是一個(gè)用于查詢員工住房情況的應(yīng)用程序窗體。其具體的設(shè)計(jì)需求如下:
(1)能選擇查詢員工的姓名、性別、所在的單位以及員工的家庭住址等信息,并能將查詢的結(jié)果顯示在窗體上。
(2)能動(dòng)態(tài)地實(shí)現(xiàn)用戶與數(shù)據(jù)庫之間的交互操作。
(3)能根據(jù)用戶提供的查詢條件實(shí)時(shí)地返回?cái)?shù)據(jù)的查詢結(jié)果。
(4)用戶能隨時(shí)地將數(shù)據(jù)的查詢結(jié)果復(fù)制到Excel工作表中。
(5)窗體界面友好,對用戶的不當(dāng)操作能示警提示。
其中表示個(gè)體標(biāo)準(zhǔn)決策矩陣與子組Ey(y=1,2,…,r)決策矩陣DEy(y=1,2,…,r)之間的不一致性(曼哈頓距離)。
(6)具有數(shù)據(jù)完整性檢測功能,對用戶輸入的查詢條件數(shù)據(jù)能夠自檢,發(fā)現(xiàn)無效的查詢條件數(shù)據(jù)能給用戶示警提示。
(7)窗體啟動(dòng)方便,操作簡單。
根據(jù)窗體設(shè)計(jì)需求,可以設(shè)計(jì)兩個(gè)窗體啟動(dòng)模塊,一個(gè)用于打開Excel文件時(shí)自動(dòng)啟動(dòng)應(yīng)用程序窗體,另一個(gè)用于應(yīng)用程序窗體關(guān)閉后可隨時(shí)重新啟動(dòng)。通過ADO建立與SQL Server數(shù)據(jù)庫服務(wù)器上“房產(chǎn)”數(shù)據(jù)庫的連接,使用SQL查詢語言進(jìn)行數(shù)據(jù)庫查詢,然后將查詢返回的結(jié)果數(shù)據(jù)在窗體中顯示。在窗體中設(shè)計(jì)多個(gè)查詢?yōu)g覽按鈕和條件查詢按鈕,便于用戶能夠?qū)崟r(shí)地、動(dòng)態(tài)地與數(shù)據(jù)庫進(jìn)行交互操作,瀏覽顯示數(shù)據(jù)庫的數(shù)據(jù);設(shè)計(jì)一個(gè)數(shù)據(jù)復(fù)制按鈕,便于用戶能隨時(shí)地將數(shù)據(jù)的查詢結(jié)果復(fù)制到Excel工作表中。在程序代碼設(shè)計(jì)中,充分考慮容錯(cuò)功能,允許用戶的誤操作和無效數(shù)據(jù)的輸入,并給出善意的示警提示。
打開Excel文件,單擊功能區(qū)的“開發(fā)工具”選項(xiàng)卡,然后單擊“Visual Basic”按鈕命令,打開Visual Basic編輯器。單擊選擇“插入”/“用戶窗體”菜單命令,創(chuàng)建一個(gè)新的窗體對象。
(1)在窗體屬性窗格中,將窗體的名稱屬性設(shè)置為“信息瀏覽窗體”,Caption屬性設(shè)置為“員工住房查詢”。
(2)在窗體上插入第一個(gè)框架控件Frame1,將其Caption屬性設(shè)置為“住房信息瀏覽”。在框架Frame1中插入4個(gè)標(biāo)簽控件,將它們的Caption屬性分別設(shè)置為“姓名”、“性別”、“單位名稱”和“家庭住址”。然后,在框架Frame1中插入4個(gè)文本框控件,名稱屬性分別TextBox1、TextBox12、Text-Box3、TextBox4。將文本框分別做適當(dāng)?shù)恼{(diào)整。
(3)在窗體上插入第二個(gè)框架控件Frame2,將其Caption屬性設(shè)置為“瀏覽查詢命令”。在框架Frame2中插入8個(gè)命令按鈕控件,將它們的名稱屬性和Caption屬性都分別設(shè)置為“第一條”、“下一條”、“上一條”、“最末條”、“姓名查詢”、“性別查詢”、“單位查詢”、“全部查詢”。
(4)在窗體上插入第三個(gè)框架控件Frame3,將其Caption屬性設(shè)置為“數(shù)據(jù)處理命令”。在框架Frame2中插入2個(gè)命令按鈕控件,將它們的名稱屬性和Caption屬性都分別設(shè)置為“復(fù)制數(shù)據(jù)”、“清除數(shù)據(jù)”。
(5)在窗體的右下方插入1個(gè)命令按鈕控件,將它的名稱屬性和Caption屬性都設(shè)置為“關(guān)閉”。
設(shè)計(jì)完成后的應(yīng)用程序窗體結(jié)構(gòu)圖如圖2所示。
圖2 應(yīng)用程序窗體設(shè)計(jì)結(jié)構(gòu)
(1)為用戶窗體設(shè)置Initialize事件,當(dāng)啟動(dòng)窗體時(shí),建立與SQL Server數(shù)據(jù)庫服務(wù)器上“房產(chǎn)”數(shù)據(jù)庫的連接,由數(shù)據(jù)庫中的“單位”、“員工”、“房屋”、“購房”四個(gè)表,鏈接查詢員工的姓名、性別、單位名稱及住房的門牌號碼等信息的全部記錄,并在窗體上顯示第一條記錄的數(shù)據(jù)。其程序代碼如下:
’建立與SQL Server數(shù)據(jù)庫服務(wù)器上指定數(shù)據(jù)庫的連接
(2)為【姓名查詢】按鈕設(shè)置Click事件。當(dāng)單擊此按鈕時(shí),就彈出一個(gè)查詢條件輸入對話框,提示用戶輸入查詢條件。程序根據(jù)用戶輸入的姓名,去查詢數(shù)據(jù)庫的“員工”表中的相同的數(shù)據(jù)。如果“員工”表中有該數(shù)據(jù),則鏈接查詢與條件相同員工的姓名、性別、單位名稱及住房的門牌號碼等信息的記錄,并在窗體上顯示第一條記錄的數(shù)據(jù)。如果“員工”表中沒有該數(shù)據(jù),則示警提示,并恢復(fù)顯示全部記錄的第一條記錄。其程序代碼如下:
(3)為【單位查詢】按鈕設(shè)置Click事件。當(dāng)單擊此按鈕時(shí),就彈出一個(gè)查詢條件輸入對話框,提示用戶輸入查詢條件。程序根據(jù)用戶輸入的單位名稱,去查詢數(shù)據(jù)庫的“單位”表中的相同的數(shù)據(jù)。如果“單位”表中有該數(shù)據(jù),則鏈接查詢與條件相同員工的姓名、性別、單位名稱及住房的門牌號碼等信息的記錄,并在窗體上顯示第一條記錄的數(shù)據(jù)。如果“單位”表中沒有該數(shù)據(jù),則示警提示,并恢復(fù)顯示全部記錄的第一條記錄。其程序代碼如下:
(1)啟動(dòng)Excel文件后,“員工住房查詢”窗體會(huì)自動(dòng)啟動(dòng),連接數(shù)據(jù)庫進(jìn)行數(shù)據(jù)查詢,返回?cái)?shù)據(jù)查詢結(jié)果,并把對數(shù)據(jù)庫查詢結(jié)果的第一條記錄顯示在窗體的文本框中,如圖3所示??梢钥吹綀D中有一個(gè)名為“啟動(dòng)住房查詢窗體”的按鈕,當(dāng)窗體關(guān)閉后,可隨時(shí)單擊它重新啟動(dòng)窗體。
(2)單擊【第一條】、【下一條】、【上一條】、【最末條】等按鈕,可實(shí)時(shí)地、動(dòng)態(tài)地瀏覽數(shù)據(jù)庫的數(shù)據(jù)。若當(dāng)前顯示的是數(shù)據(jù)庫的第一條記錄時(shí),繼續(xù)單擊【上一條】按鈕,程序會(huì)彈出提示框提示“已經(jīng)是第一條記錄!”;同樣,若當(dāng)前顯示的是數(shù)據(jù)庫的最后一條記錄時(shí),仍然繼續(xù)單擊【下一條】按鈕,程序會(huì)彈出提示框提示“已經(jīng)是最后一條記錄!”。如圖4所示。
圖3 應(yīng)用程序窗體啟動(dòng)畫面
圖4 瀏覽顯示畫面
(3)單擊【姓名查詢】、【性別查詢】、【單位查詢】等按鈕,程序會(huì)彈出相應(yīng)的查詢條件輸入框,等候用戶的輸入信息;當(dāng)用戶輸入完條件后單擊【確定】按鈕,程序會(huì)根據(jù)查詢條件去查詢數(shù)據(jù)庫的數(shù)據(jù),將所有滿足查詢條件的數(shù)據(jù)返回到窗體,并顯示其第一條記錄信息。當(dāng)用戶輸入的條件數(shù)據(jù)經(jīng)程序自檢后發(fā)現(xiàn)是一個(gè)無效數(shù)據(jù)時(shí),程序會(huì)彈出提示框提示“沒有該條件的記錄!”。如圖5所示。
圖5 條件查詢顯示畫面
(4)單擊【復(fù)制數(shù)據(jù)】按鈕,程序會(huì)把當(dāng)前在窗體中能夠?yàn)g覽顯示的全部數(shù)據(jù)復(fù)制到Excel工作表中。如圖6所示。
圖6 數(shù)據(jù)復(fù)制效果
(5)單擊【清除數(shù)據(jù)】按鈕,程序會(huì)把當(dāng)前Excel工作表中的數(shù)據(jù)全部刪除。如圖7所示。
圖7 數(shù)據(jù)清除效果
(6)單擊【全部查詢】按鈕,程序會(huì)重新查詢數(shù)據(jù)庫中所有數(shù)據(jù),并返回查詢結(jié)果,在窗體的文本框中顯示第一條記錄信息。如圖3所示。
以上的應(yīng)用實(shí)例運(yùn)行效果較好,它即可以實(shí)時(shí)地、動(dòng)態(tài)地完成數(shù)據(jù)庫中數(shù)據(jù)的查詢和瀏覽的聯(lián)機(jī)操作,也可以隨時(shí)批量地將數(shù)據(jù)庫的查詢結(jié)果復(fù)制到Excel工作表中,且窗體響應(yīng)速度快、界面清晰美觀、操作簡單方便,完全滿足起初設(shè)定的設(shè)計(jì)需求。通過這個(gè)應(yīng)用實(shí)例介紹,可以看到,利用Excel VBA可以設(shè)計(jì)制作功能強(qiáng)大、性能優(yōu)良的應(yīng)用程序窗體。更加有意義的是,可以進(jìn)一步利用Excel強(qiáng)大的數(shù)據(jù)處理功能、計(jì)算分析功能以及良好的應(yīng)用軟件開發(fā)環(huán)境,可以將這種技術(shù)應(yīng)用到管理信息系統(tǒng)的開發(fā)中。
[1] 張 旭.利用Excel VBA/ADO選擇性地查詢數(shù)據(jù)庫的數(shù)據(jù)[J].武漢工程職業(yè)技術(shù)學(xué)院學(xué)報(bào),2009,(4):30-34.
[2] 趙志東.Excel VBA基礎(chǔ)入門[M].人民郵電出版社,2006.
[3] (美)John Green;Stephen Bullen;Rob Bovey;Michael Alexander.Excel2007 VBA參考大全[M].人民郵電出版社,2009.
Design and Make Application Program Forms with EXCEL VBA
ZHANG Xu
The utilization of EXCEL VBA in designing application window of powerful function and excellent capability may simplify process operation and beautify interface so as to satisfy different application needs of the clients.
VBA;ADO;database;window
TP311.13
A
1671-3524(2010)04-0041-05
(責(zé)任編輯:栗 曉)
2010-07-10
2010-10-26
張 旭(1955~),男,副教授.E-mail:zxu@wgxy.net