引言
本人本次實踐的目標是數據查詢。具體實現方式應該是:
- 使用窗體及其他控件做查詢的條件的輸入
- 使用excel作爲查詢結果的輸出
- 從桌面上看應該是,前面一個窗口輸入查詢條件,然後點確定,後面有個excel顯示結果。
- 類似下圖這種
一、打開窗口
窗體俗稱對話框,在可視化的面向對象的編程軟件中都應該有。在VBA中也有,可以打開 excel->開發工具
點開Visual Basic就會進入到變成界面,然後就可以插入窗體,如下圖
二、窗體簡介
窗體,也就是窗口,或者叫對話框,是vba定義的一個對象,或者說一類對象。微軟對“Microsoft 窗體”對象的介紹就是下面一幅圖
我們本節所說的”窗體“就是第二層(UserForm)。我們可以從圖中看出,窗體對象,不止是指UserForm,還指其他的對象,如Controls,Font,MultiPage,等等。從面向對象的觀點來說,這個圖表示的應該是一個繼承圖。(我不是很熟,猜的) 如果上圖是個繼承關係圖,那麼我們可以得到幾個結論:
- 他們的事件可以繼承
- 他們的屬性也可以繼承
- 且兒子的屬性和事件可能比父親多。。。。
三、窗體屬性簡介
屬性,表示這個窗體固有的特性,如基本的:長寬高,位置,顏色等;特殊的:如字體大小啊,有無滾動條啊等等
所以分下類:
- 基礎屬性:外觀,位置,字體
名稱 | 窗體名稱 | 該窗體的標識 | 可能是唯一標識 |
BackColor |
背景色 | ||
BorderColor |
邊框顏色 | 只有BorderStyle爲1時,這個纔有效 | |
BorderStyle |
邊框類型(兩種) |
0 fmBorderStyleNone 1 fmBorderStyleSingle |
|
Caption |
窗體左上角顯示的名字 | ||
Height |
窗體顯示位置-高 | ||
Width |
窗體顯示位置-寬 |
- 行爲屬性
Cycle |
tab順序指定控件接收焦點的順序 |
0 fmCycleAllForms 2 fmCycleCurrentForm |
選0時,使用tab鍵,會遍歷所有的該窗體範圍內所有的控件;選1時,使用tab鍵,只會遍歷某一窗體範圍內的控件,tab不會跳出範圍,到最後一個控件後會在回到該窗體範圍的第一個控件 |
showmodal | 窗口是否鎖死(這個詞合適) |
true false |
選true叫模態,false叫非模態 模態下,如果這個窗口是激活的,其他窗體或窗口則不能被選中。非模態,反之。 |
- 滾動條
ScrollBars |
滾動條 |
0 fmScrollBarsNone 1 fmScrollBarsHorizontal 2 fmScrollBarsVertical 3 fmScrollBarsBoth |
0 無 1 水平 2 垂直 3 全部 |
ScrollHeight ScrollTop |
滾動條高 | height有值,top才填值 | 只有當ScrollHeight值大於窗體本身的height時,滾動條纔會顯示。這個時候Top表示滾動條離頂部的距離 |
ScrollWidth ScrollLeft |
滾動條寬 | width有值,left才能填值 | 只有當ScrollWidth值大於,窗體本身的Width時,滾動條纔會顯示。這個時候left表示滾動條離左側的距離 |
四、窗體事件、方法簡介
- 常用事件
Initialize
就是在初始化窗口時,要對窗口乾的事情,比如給窗口屬性賦值,給窗體內包含的控件賦初始值。
Click
點擊窗體時,會幹的事情,比如隱藏窗體等等
Terminate
關閉窗體是要乾的事情,比如保存文件,關閉excel等
- 怎麼弄出來事件呢?
先在左邊選中窗口(對象),右邊基本上都是事件。。。每個對象能響應的事件可能是不一樣多的
- 常用方法
move,copy等等呢
- 怎麼弄出來方法呢?
跟你寫代碼一樣,寫出這個對象在.一下,後面跟的就是方法和屬性
一般黑色表示屬性,綠色標識方法。
五、Initalize 、click事件示例
下列示例假設程序中已有兩個窗體UserForms。在 UserForm1 的Initalize事件中加載 UserForm2 ,並將其顯示出來。當用戶單擊 UserForm2 時,就會將其隱含起來,而 UserForm1 將會出現。而當用戶單擊 UserForm1 時,UserForm2 便會再次出現。
'這是 UserForm1 的 Initialize 事件過程
Private Sub UserForm_Initialize()
Load UserForm2
UserForm2.Show
End Sub
'這是 UserForm2 的 Click 事件過程
Private Sub UserForm_Click()
UserForm2.Hide
End Sub
' 這是 UserForm1 的 Click 事件
Private Sub UserForm_Click()
UserForm2.Show
End Sub