在vba中也可以使用窗體。
在窗體的設計狀態下,可以添加各種控件。
有時候我們希望通過vba代碼在窗體中動態的添加控件,而不是事先在窗體中添加控件再寫代碼。
在vba中可以使用UserForm對象的Controls.Add方法動態添加控件,它的語法如下:
Set Control = object.Add( ProgID [, Name [, Visible]])其中ProgID參數爲要添加的控件的程序標識符,Name參數爲要添加的控件的名稱, Visible參數設置該控件是否可見。
常見的控件的ProgID如下:
CheckBox
Forms.CheckBox.1
ComboBox
Forms.ComboBox.1
CommandButton
Forms.CommandButton.1
Frame
Forms.Frame.1
Image
Forms.Image.1
Label
Forms.Label.1
ListBox
Forms.ListBox.1
MultiPage
Forms.MultiPage.1
OptionButton
Forms.OptionButton.1
ScrollBar
Forms.ScrollBar.1
SpinButton
Forms.SpinButton.1
TabStrip
Forms.TabStrip.1
TextBox
Forms.TextBox.1
ToggleButton
Forms.ToggleButton.1
如下的代碼將在用戶窗體UserForm1中添加10個標簽控件和10個文本框控件:
Sub AddControlsDynamically() Dim oLB As Control Dim oTextBox As Control Dim oCombox As Control With UserForm1 For i = 1 To 10 '添加標簽控件 Set oLB = .Controls.Add("Forms.Label.1", "LB" & i, True) With oLB .Caption = "第" & i & "個標簽" .Left = 50 .Top = 30 + (i - 1) * 40 End With '添加文本框控件 Set oTextBox = .Controls.Add("Forms.TextBox.1", "Txt" & i, True) With oTextBox .Left = 50 + 100 .Top = 30 + (i - 1) * 40 .Width = 300 .Height = 30 End With Next i .Show End WithEnd Sub如下圖所示,其中兩個命令按鈕是在設計狀態下添加的。
當控件是在vba代碼的運行階段動態添加的,如果要訪問控件的內容,需要用如下的加感歎號的引用形式:
userform1!thebox.text比如要讀取上圖中的第一個文本框的內容,可以使用如下的代碼:
MsgBox UserForm1!Txt1.Text其中Txt1爲動態添加文本框時指定的名稱。