TabStrip控件和Page控件是十分相像,如果不仔細(xì)研究,一定會(huì)搞錯(cuò)。
本節(jié)我們主要介紹,如何利用VBA代碼進(jìn)行TabStrip控件的添加和操作。
看上去TabStrip控件和分頁(yè)控件一樣,分別進(jìn)行頁(yè)面切換,但是其原理并不一樣。
簡(jiǎn)單來說,分頁(yè)控件可以當(dāng)做一個(gè)容器,可添加其它控件,如文本框、按鈕等。
TabStrip控件卻不可以,它就是一個(gè)單獨(dú)的顯示控件,其內(nèi)部沒有任何包含控件。
可以理解為一件透明的衣服,表單中的其它控件都可以被顯示出來。
通過一個(gè)示例介紹一下,重點(diǎn)在后面。
如下圖所示,分別添加了星期一到星期日,7個(gè)Tab。
圖中控件,除了Form表單外,全部通過VBA代碼進(jìn)行添加,所以編碼過程中,是看不到任何控件的。
本示例可實(shí)現(xiàn),切換Tab,也就是切換星期標(biāo)簽,然后單擊選擇按鈕,即可顯示出標(biāo)簽文本,提示選擇了星期幾。
標(biāo)簽控件和按鈕控件都屬于Form表單內(nèi)部按鈕。
整個(gè)過程似乎并沒有什么用,但是在某些情況之下是需要這樣操作的。
如果,我們的內(nèi)容不變而只改變Tab項(xiàng)目的時(shí)候就用到此控件了。
比如,每天的事項(xiàng)是固定的,但是星期幾是不固定,所以在這些固定內(nèi)容不變的情況下,只需要改變星期即可對(duì)數(shù)據(jù)進(jìn)行操作,這就是一個(gè)很好的方法。
應(yīng)用場(chǎng)景根據(jù)不同的行業(yè)來判斷,下面我們重點(diǎn)關(guān)注一下代碼。
代碼是軟件的靈魂,用眼睛看到的內(nèi)容,其背后都是一些符號(hào)代碼,通過相應(yīng)的規(guī)則排列,然后編譯呈現(xiàn)出來的效果。
如下代碼就是上述對(duì)話框成型的一個(gè)過程。
首先,新建一個(gè)Form表單,其實(shí)Form表單也可以通過代碼創(chuàng)建,這示例并沒有這么做。
然后在Form表單中添加如下代碼:
'--------------- TabStrip 控件 VBA代碼編程
'-------- 定義按鈕類
Dim BtCom As New BtnClick
Private Sub UserForm_Initialize()
Dim aobj As Object, fobj As Object, btnObj As Object
'------------- 新建 TabStrip 控件
Set aobj = Me.Controls.Add("Forms.TabStrip.1", "Tp")
'----------------設(shè)置 屬性
With aobj
.Top = 30
.Left = 20
.Width = Me.Width - 50
.Height = Me.Height - 90
.Style = 0
'.BackColor = RGB(221, 221, 221)
.ForeColor = QBColor(9)
.Tabs.Clear '刪除 Tab
For i = 0 To 6
aobj.Tabs.Add (VBA.Format(i, "aaaa")) '添加 Tab
Next i
End With
'新建按鈕
Set btnObj = Me.Controls.Add("Forms.CommandButton.1", "Btn1")
With btnObj
.Width = 120
.Height = 28
.Top = aobj.Top + aobj.Height - .Height - 5
.Left = aobj.Left + 10
.Caption = "選 擇"
End With
BtCom.apend btnObj '關(guān)聯(lián)按鈕事件
End Sub
上面的代碼成功建立之后,可以運(yùn)行一下試試有沒有問題。
實(shí)際上是有問題的,因?yàn)椋a是有區(qū)別的,有些代碼是一些死代碼,有些代碼是代碼中的靈魂。
重點(diǎn)來了。
有了下面的代碼才能讓整合表單運(yùn)行起來有了活的行為。
'------------- 定義類 BtnClick 按鈕事件
Private WithEvents Btn As MSForms.CommandButton
Public Sub apend(ctl As MSForms.CommandButton)
Set Btn = ctl
End Sub
'------------ Click 事件
Private Sub Btn_Click()
Dim xobj As Object
For Each xobj In Btn.Parent.Controls '遍歷表單控件
If TypeName(xobj) = "TabStrip" Then '如果是TabStrip控件
If xobj.Name = "Tp" Then '如果控件名為 Tp
'新建 Label 控件
AddLabel xobj, xobj.SelectedItem.Caption, xobj.SelectedItem.Index
Exit For
End If
End If
Next xobj
End Sub
'----------------- 新建 Label 控件過程
Private Sub AddLabel(xobj As Object, lStr As String, c As Integer)
Dim lobj As Object
'如果 Label 已經(jīng)存在
If CheckLabel(xobj, lStr, c) Then Exit Sub
'如果 Label 不存在
'新一個(gè) Label 控件
Set lobj = xobj.Parent.Controls.Add("Forms.Label.1")
With lobj
.Top = xobj.Top + 60
.Left = xobj.Left + 100
.Height = 60
.Width = 300
.Caption = "你選擇了:" & lStr
.ForeColor = QBColor(c)
.BackStyle = 0
With .Font
.Name = "微軟雅黑"
.Size = 30
.Bold = True
End With
End With
End Sub
'------------- 檢測(cè) Label 控件是否存在 返回Boolean值,True 或 False
Private Function CheckLabel(xobj As Object, lStr As String, c As Integer) As Boolean
CheckLabel = False
Dim lobj As Object
'遍歷 表單控件
For Each lobj In xobj.Parent.Controls
'如果 Label 控件存在
If TypeName(lobj) = "Label" Then
With lobj
.Caption = "你選擇了:" & lStr
.ForeColor = QBColor(c)
End With
CheckLabel = True
End If
Next lobj
End Function
上述代碼里有4個(gè)過程或函數(shù),分別執(zhí)行不同的功能,缺一不可。
這就是一些符號(hào)或文字,變成圖象的方法,其中還有很多需要掌握的內(nèi)容,比如運(yùn)行環(huán)境,及運(yùn)行環(huán)境配置。實(shí)際上是一套很繁雜的事情,但是這些繁雜的事情只做一遍,后面就不用做了。
如果想讓自己輕松,從來都是經(jīng)歷風(fēng)雨之后的愉悅。
編程這件小事也一樣,如不曾毫無頭緒,哪會(huì)感覺到運(yùn)行后的順暢!
對(duì)了,上面的代碼是一個(gè)類模塊,模塊名可以自己設(shè)置,本示例設(shè)置為:BtnClick
聯(lián)系客服