1. 程式人生 > >Excel VBA入門(十)使用者窗體開發

Excel VBA入門(十)使用者窗體開發

VBA 中的使用者窗體就是指帶 UI 的使用者介面,在執行的時候會單獨彈出一個視窗,類似於在 windows 系統中執行的一個可執行程式一樣(這個說法不太嚴謹,因為可執行程式也可能是隻有命令視窗而沒有 UI 的)。再具體一點,就是一個視窗介面當中,有可能會包含有文字框、複選框、單選按鈕、下拉列表,就如在網頁中填寫的表單一樣。再具體一點,就是如下圖這樣的:

1. 使用者介面設計

如上圖,UI 設計的部分其實是很簡單的,微軟的特色,直接拖拉拽就可以實現了。而每一個控制元件(或者稱為元素,也即放進窗體中的各種按鈕、輸入框等等)的屬性,可以在選中它之後,在預設位於左下角的 “屬性” 列表框中進行設定,可設定項包含按鈕的名字、前景色、背景色、顯示出來的文字、寬度、高度、字型顏色、字號、距離左側的距離、距離頂部的距離等等,很簡單。如果這個 “屬性” 框沒有出現的話,可以在頂部選單欄的 “檢視” 中選擇 “屬性視窗”,它就會出現了。

2. 使用者互動

2.1 按鈕事件

直接在窗體中雙擊放進去的按鈕,就可以進入到按鈕的事件開發介面,預設的是單擊事件,如下圖

留意上圖中的紅框部分,左上角顯示的是該按鈕的名稱,右上角顯示的是該按鈕的事件,這裡是單擊事件 Click,這兩個都是下拉選擇框,分別點選它們右邊的倒三角可以看到其它的控制元件和各控制元件對應的其它方法,如下

如果你選中了其它事件,則 VBE 會自動給你生成這個事件的函式簽名,它是根據按鈕的名稱和事件名稱來命名的,所以這個函式名字應該是不能改動的(我沒有試過改)

其它按鈕的事件也類似,就不贅述了。

2.2 獲取控制元件的值

因為控制元件很多,就不能一一舉例了,只舉幾具做為示例,其它也類似的,通常都是它在屬性列表中叫什麼,就能通過這個名字來取到它的值

文字框

假設文字框名為 tbx,則通過 tbx.Value 或者 tbx.Text 都能得到輸入到文字框中的內容

多選按鈕

假設多選按鈕名為 cbx,則通過 cbx.Value 可以得到這個多選按鈕的值,如果它被選中了,則值為 True,否則為 False。通過 cbx.Caption 可以得到這個多選按鈕對應的文字

單選按鈕

假設單選按鈕名為 obtn,則通過 obtn.Value 可以得到這個多選按鈕的值,如果它被選中了,則值為 True,否則為 False。通過 cbx.Caption 可以得到這個多選按鈕對應的文字

3. 歷遍所有控制元件

比如一個窗體中,存在多個多選框,要一個個去判斷它是否被選中,此時可以考慮歷遍所有控制元件,通過判斷控制元件型別的方法來獲取多選框。

先看如下程式碼:

orderStr = ""
For Each ctrls In Me.Controls
    If TypeName(ctrls) = "CheckBox" Then
        If ctrls.Value = True Then
            orderStr = orderStr & "||" & ctrls.Caption
        End If
    End If
Next ctrls

Me.Controls 是一個固定的寫法,Me 代表當前窗體,而 Controls 則表示窗體上的所有控制元件。用 TypeName 函式來判斷每個控制元件的型別,然後就可以對不同的控制元件執行不同的操作了

4. 動態生成控制元件

即不再使用人工的方式來拖拉拽設定控制元件,而是在 VBA 程式碼中來根據條件來動態地新增控制元件到窗體中。

先看程式碼:

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 + gap
Next order

這裡的 orderArr 是一個數組,所以可以使用 For Each 來歷遍它。重點在於第 2 行,這裡的 form_combinedModel 是窗體的名字,通過它的 .Controls.Add 方法就能夠新增新控制元件。這個方法的引數是固定的,需要新增什麼型別的控制元件就使用對應的引數,示例程式碼中新增的是多選框,對應的是 Forms.CheckBox.1,這個引數可以在 這裡 找到。

此外要注意的是,這個新新增的控制元件是一個物件,所以需要在變數前面使用 Set 關鍵字。示例程式碼中接下來的 With 語句,是用於設定這個新的控制元件的屬性,這裡設定了它的位置(左距、上距)、寬度、高度、顯示文字


本系列教程其它文章

Excel VBA 入門(零)
Excel VBA 入門(一)資料型別
Excel VBA 入門(二)陣列和字典
Excel VBA 入門(三) 流程控制1-條件選擇
Excel VBA 入門(四)流程控制2-迴圈控制
Excel VBA 入門(五)Excel物件操作
Excel VBA 入門(六)過程和函式
Excel VBA 入門(七)註釋、巨集按鈕及錯誤處理
Excel VBA 入門(八)單元格邊框
Excel VBA 入門(九)操作工作薄
Excel VBA入門(十)使用者窗體開發