VBA 中的用戶窗體就是指帶 UI 的用戶界面,在運(yùn)行的時(shí)候會(huì)單獨(dú)彈出一個(gè)窗口,類似于在 windows 系統(tǒng)中運(yùn)行的一個(gè)可執(zhí)行程序一樣(這個(gè)說(shuō)法不太嚴(yán)謹(jǐn),因?yàn)榭蓤?zhí)行程序也可能是只有命令窗口而沒(méi)有 UI 的)。再具體一點(diǎn),就是一個(gè)窗口界面當(dāng)中,有可能會(huì)包含有文本框、復(fù)選框、單選按鈕、下拉列表,就如在網(wǎng)頁(yè)中填寫(xiě)的表單一樣。再具體一點(diǎn),就是如下圖這樣的:
如上圖,UI 設(shè)計(jì)的部分其實(shí)是很簡(jiǎn)單的,微軟的特色,直接拖拉拽就可以實(shí)現(xiàn)了。而每一個(gè)控件(或者稱為元素,也即放進(jìn)窗體中的各種按鈕、輸入框等等)的屬性,可以在選中它之后,在默認(rèn)位于左下角的 “屬性” 列表框中進(jìn)行設(shè)置,可設(shè)置項(xiàng)包含按鈕的名字、前景色、背景色、顯示出來(lái)的文本、寬度、高度、字體顏色、字號(hào)、距離左側(cè)的距離、距離頂部的距離等等,很簡(jiǎn)單。如果這個(gè) “屬性” 框沒(méi)有出現(xiàn)的話,可以在頂部菜單欄的 “視圖” 中選擇 “屬性窗口”,它就會(huì)出現(xiàn)了。
直接在窗體中雙擊放進(jìn)去的按鈕,就可以進(jìn)入到按鈕的事件開(kāi)發(fā)界面,默認(rèn)的是單擊事件,如下圖
留意上圖中的紅框部分,左上角顯示的是該按鈕的名稱,右上角顯示的是該按鈕的事件,這里是單擊事件 Click
,這兩個(gè)都是下拉選擇框,分別點(diǎn)擊它們右邊的倒三角可以看到其它的控件和各控件對(duì)應(yīng)的其它方法,如下
如果你選中了其它事件,則 VBE 會(huì)自動(dòng)給你生成這個(gè)事件的函數(shù)簽名,它是根據(jù)按鈕的名稱和事件名稱來(lái)命名的,所以這個(gè)函數(shù)名字應(yīng)該是不能改動(dòng)的(我沒(méi)有試過(guò)改)
其它按鈕的事件也類似,就不贅述了。
因?yàn)榭丶芏啵筒荒芤灰慌e例了,只舉幾具做為示例,其它也類似的,通常都是它在屬性列表中叫什么,就能通過(guò)這個(gè)名字來(lái)取到它的值
文本框
假設(shè)文本框名為 tbx,則通過(guò) tbx.Value
或者 tbx.Text
都能得到輸入到文本框中的內(nèi)容
多選按鈕
假設(shè)多選按鈕名為 cbx,則通過(guò) cbx.Value
可以得到這個(gè)多選按鈕的值,如果它被選中了,則值為 True,否則為 False。通過(guò) cbx.Caption
可以得到這個(gè)多選按鈕對(duì)應(yīng)的文本
單選按鈕
假設(shè)單選按鈕名為 obtn,則通過(guò) obtn.Value
可以得到這個(gè)多選按鈕的值,如果它被選中了,則值為 True,否則為 False。通過(guò) cbx.Caption
可以得到這個(gè)多選按鈕對(duì)應(yīng)的文本
比如一個(gè)窗體中,存在多個(gè)多選框,要一個(gè)個(gè)去判斷它是否被選中,此時(shí)可以考慮歷遍所有控件,通過(guò)判斷控件類型的方法來(lái)獲取多選框。
先看如下代碼:
orderStr = ""For Each ctrls In Me.Controls If TypeName(ctrls) = "CheckBox" Then If ctrls.Value = True Then orderStr = orderStr & "||" & ctrls.Caption End If End IfNext ctrls
Me.Controls
是一個(gè)固定的寫(xiě)法,Me
代表當(dāng)前窗體,而 Controls
則表示窗體上的所有控件。用 TypeName
函數(shù)來(lái)判斷每個(gè)控件的類型,然后就可以對(duì)不同的控件執(zhí)行不同的操作了
即不再使用人工的方式來(lái)拖拉拽設(shè)置控件,而是在 VBA 代碼中來(lái)根據(jù)條件來(lái)動(dòng)態(tài)地添加控件到窗體中。
先看代碼:
For Each order In orderArr Set newCbk = form_combinedModel.Controls.Add("Forms.CheckBox.1") With newCbk .Left = 30 .Top = y .Width = 80 .Height = 18 .Caption = order End With y = y + gap panelH = panelH + gapNext order
這里的 orderArr
是一個(gè)數(shù)組,所以可以使用 For Each
來(lái)歷遍它。重點(diǎn)在于第 2 行,這里的 form_combinedModel
是窗體的名字,通過(guò)它的 .Controls.Add
方法就能夠添加新控件。這個(gè)方法的參數(shù)是固定的,需要添加什么類型的控件就使用對(duì)應(yīng)的參數(shù),示例代碼中添加的是多選框,對(duì)應(yīng)的是 Forms.CheckBox.1
,這個(gè)參數(shù)可以在 這里 找到。
此外要注意的是,這個(gè)新添加的控件是一個(gè)對(duì)象,所以需要在變量前面使用 Set
關(guān)鍵字。示例代碼中接下來(lái)的 With
語(yǔ)句,是用于設(shè)置這個(gè)新的控件的屬性,這里設(shè)置了它的位置(左距、上距)、寬度、高度、顯示文本
本系列教程其它文章
Excel VBA 入門(零)
Excel VBA 入門(一)數(shù)據(jù)類型
Excel VBA 入門(二)數(shù)組和字典
Excel VBA 入門(三) 流程控制1-條件選擇
Excel VBA 入門(四)流程控制2-循環(huán)控制
Excel VBA 入門(五)Excel對(duì)象操作
Excel VBA 入門(六)過(guò)程和函數(shù)
Excel VBA 入門(七)注釋、宏按鈕及錯(cuò)誤處理
Excel VBA 入門(八)單元格邊框
Excel VBA 入門(九)操作工作薄
Excel VBA入門(十)用戶窗體開(kāi)發(fā)
聯(lián)系客服