No.1TabStrip控件和Page控件是十分相像,如果不仔細(xì)研究,一定會搞錯。 本節(jié)我們主要介紹,如何利用VBA代碼進(jìn)行TabStrip控件的添加和操作。 看上去TabStrip控件和分頁控件一樣,分別進(jìn)行頁面切換,但是其原理并不一樣。 簡單來說,分頁控件可以當(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)容不變的情況下,只需要改變星期即可對數(shù)據(jù)進(jìn)行操作,這就是一個(gè)很好的方法。 應(yīng)用場景根據(jù)不同的行業(yè)來判斷,下面我們重點(diǎn)關(guān)注一下代碼。 No.2代碼是軟件的靈魂,用眼睛看到的內(nèi)容,其背后都是一些符號代碼,通過相應(yīng)的規(guī)則排列,然后編譯呈現(xiàn)出來的效果。 如下代碼就是上述對話框成型的一個(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)?,代碼是有區(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 '------------- 檢測 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í)行不同的功能,缺一不可。 這就是一些符號或文字,變成圖象的方法,其中還有很多需要掌握的內(nèi)容,比如運(yùn)行環(huán)境,及運(yùn)行環(huán)境配置。實(shí)際上是一套很繁雜的事情,但是這些繁雜的事情只做一遍,后面就不用做了。 如果想讓自己輕松,從來都是經(jīng)歷風(fēng)雨之后的愉悅。 編程這件小事也一樣,如不曾毫無頭緒,哪會感覺到運(yùn)行后的順暢! 對了,上面的代碼是一個(gè)類模塊,模塊名可以自己設(shè)置,本示例設(shè)置為:BtnClick
|