首頁 > 科技

VBA 程式設計,用程式碼新增TabStrip控制項方法總結,滿滿乾貨,不容錯過

2021-07-22 03:05:34

No.1

TabStrip控制項和Page控制項是十分相像,如果不仔細研究,一定會搞錯。

本節我們主要介紹,如何利用VBA程式碼進行TabStrip控制項的新增和操作。

看上去TabStrip控制項和分頁控制項一樣,分別進行頁面切換,但是其原理並不一樣。

簡單來說,分頁控制項可以當做一個容器,可新增其它控制項,如文字框、按鈕等。

TabStrip控制項卻不可以,它就是一個單獨的顯示控制項,其內部沒有任何包含控制項。

可以理解為一件透明的衣服,表單中的其它控制項都可以被顯示出來。

通過一個示例介紹一下,重點在後面。

如下圖所示,分別添加了星期一到星期日,7個Tab。

圖中控制項,除了Form表單外,全部通過VBA程式碼進行新增,所以編碼過程中,是看不到任何控制項的。

本示例可實現,切換Tab,也就是切換星期標籤,然後單擊選擇按鈕,即可顯示出標籤文字,提示選擇了星期幾。

標籤控制項和按鈕控制項都屬於Form表單內部按鈕。

整個過程似乎並沒有什麼用,但是在某些情況之下是需要這樣操作的。

如果,我們的內容不變而只改變Tab項目的時候就用到此控制項了。

比如,每天的事項是固定的,但是星期幾是不固定,所以在這些固定內容不變的情況下,只需要改變星期即可對資料進行操作,這就是一個很好的方法。

應用場景根據不同的行業來判斷,下面我們重點關注一下程式碼。

No.2

程式碼是軟體的靈魂,用眼睛看到的內容,其背後都是一些符號程式碼,通過相應的規則排列,然後編譯呈現出來的效果。

如下程式碼就是上述對話方塊成型的一個過程。

首先,新建一個Form表單,其實Form表單也可以通過程式碼創建,這示例並沒有這麼做。

然後在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")

'----------------設定 屬性

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 '關聯按鈕事件

End Sub

上面的程式碼成功建立之後,可以運行一下試試有沒有問題。

實際上是有問題的,因為,程式碼是有區別的,有些程式碼是一些死程式碼,有些程式碼是程式碼中的靈魂。

重點來了。

有了下面的程式碼才能讓整合表單運行起來有了活的行為。

'------------- 定義類 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 已經存在

If CheckLabel(xobj, lStr, c) Then Exit Sub

'如果 Label 不存在

'新一個 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個過程或函數,分別執行不同的功能,缺一不可。

這就是一些符號或文字,變成圖象的方法,其中還有很多需要掌握的內容,比如運行環境,及運行環境配置。實際上是一套很繁雜的事情,但是這些繁雜的事情只做一遍,後面就不用做了。

如果想讓自己輕鬆,從來都是經歷風雨之後的愉悅。

程式設計這件小事也一樣,如不曾毫無頭緒,哪會感覺到運行後的順暢!

對了,上面的程式碼是一個類模組,模組名可以自己設定,本示例設定為:BtnClick

歡迎關注、收藏

END


IT145.com E-mail:sddin#qq.com