Chọn nhiều Control trả về dữ liệu tương ứng trong VBA

Trong bài học trước, Tinvanphong.com có gửi đến bạn đọc cách Thêm hàng loạt Control trong USERFORM. Hôm nay, Tinvanphong.com tiếp tục gửi bạn cách Chọn nhiều Control trả về dữ liệu tương ứng trong VBA . Thông thường, bạn cần tạo nhiều Label  và mỗi Label là 1 Sub, cách này đối với bạn có sử dụng đối với trường hợp 5 6 cái LABEL. Còn đối với 500 LABEL thì sao, đấy không phải là cách hiểu quả hay. Hãy cùng mình xem bài hướng dẫn sau đây nhé.

Chọn nhiều Control trả về dữ liệu tương ứng trong VBA

Chọn nhiều Control trả về dữ liệu tương ứng trong VBA
Chọn nhiều Control trả về dữ liệu tương ứng trong VBA

I.CÔNG DỤNG

Tạo nhiều CONTROL  trong USERFORM.
Trả về giá trị tương ứng ,theo dữ liệu trong WORKSHEET.
Chỉ cần 1 Sub khởi tạo.

II. CODE, HƯỚNG DẪN

Bước 1 : Các bạn cần tạo cái Frame, trong userform và gắn CODE dưới vào.

'--------------------------------------------- [ GIAO DIEN ] -----------------------------------
'--------------------------------------------- [ GIAO DIEN ] -----------------------------------
'--------------------------------------------- [ GIAO DIEN ] -----------------------------------
'--------------------------------------------- [ GIAO DIEN ] -----------------------------------
Private M_Label As Collection
Sub Cot1()
K = 0
Dim LR, I As Integer
LR = Sheet2.Range("A" & Rows.Count).End(xlUp).Row
For I = 2 To LR Step 3
Set TenSP = Frame1.Controls.Add("Forms.Label.1")
With TenSP
    .Name = "Label" & I
    .Left = 5
    .Height = 55
    .Top = K + 5
    .Width = 70
    .BorderStyle = 1 ' mau nen bat
    .BorderColor = &HC0C0C0 ' Vieng
    .BackStyle = 1 ' vieng bat
    .TextAlign = 2 ' chu nam giua
    .Font.Size = 32 ' font chu
    .Font.Bold = True ' in dam
    .ForeColor = Font_Color1
    .Font.Name = "Segoe UI"
    .Caption = Sheet2.Cells(I, 1)
    
    Frame1.ScrollHeight = .Top + 60
End With
    K = K + 60
Next I
End Sub
Sub Cot2()
K = 0
Dim LR, I As Integer
LR = Sheet2.Range("A" & Rows.Count).End(xlUp).Row
For I = 3 To LR Step 3
Set TenSP = Frame1.Controls.Add("Forms.Label.1")
With TenSP
    .Name = "Label" & I
    .Left = 80
    .Height = 55
    .Top = K + 5
    .Width = 70
    .BorderStyle = 1 ' mau nen bat
    .BorderColor = &HC0C0C0 ' Vieng
    .BackStyle = 1 ' vieng bat
    .TextAlign = 2 ' chu nam giua
    .Font.Size = 32 ' font chu
    .Font.Bold = True ' in dam
    .ForeColor = Font_Color1
    .Font.Name = "Segoe UI"
    .Caption = Sheet2.Cells(I, 1)
End With
    K = K + 60
Next I
End Sub
Sub Cot3()
K = 0
Dim LR, I As Integer
LR = Sheet2.Range("A" & Rows.Count).End(xlUp).Row
For I = 4 To LR Step 3
Set TenSP = Frame1.Controls.Add("Forms.Label.1")
With TenSP
    .Name = "Label" & I
    .Left = 155
    .Height = 55
    .Top = K + 5
    .Width = 70
    .BorderStyle = 1 ' mau nen bat
    .BorderColor = &HC0C0C0 ' Vieng
    .BackStyle = 1 ' vieng bat
    .TextAlign = 2 ' chu nam giua
    .Font.Size = 32 ' font chu
    .Font.Bold = True ' in dam
    .ForeColor = Font_Color1
    .Font.Name = "Segoe UI"
    .Caption = Sheet2.Cells(I, 1)
End With
    K = K + 60
Next I
End Sub
Private Sub UserForm_Initialize()
Call Cot1
Call Cot2
Call Cot3
Dim A_Label As Class1
Dim I, LR As Integer
LR = Sheet2.Range("A" & Rows.Count).End(xlUp).Row
Set M_Label = New Collection
On Error Resume Next
For I = 2 To LR
    Set A_Label = New Class1
    Set A_Label.MyLabel = Me.Controls("Label" & I)
    M_Label.Add A_Label, CStr(M_Label.Count - 1)
Next I
End Sub
Chọn nhiều Control trả về dữ liệu tương ứng trong VBA
Chọn nhiều Control trả về dữ liệu tương ứng trong VBA

Call Cot1, Co2, Cot3 : trong bài viết trước mình có chỉ cho các ban cách tạo nhìu Control trong VBA bạn có thể xem tại đây
LR : tìm dòng cuối bản dử liệu để sát đinh được có bao nhiu CONTROL mình phải tạo ,
For i : Mình sử dụng vòng lặp chạy qua để tạo các CONTROL , kết hợp với bước nhảy là 3, củ thể là 1 4 7 , 2 5 8 , 3 6 9

Collection trong VBA được sử dụng để lưu trữ một nhóm các giá trị. Collection có thể lưu trữ một tập các hạng mục tương tự, ví dụ như một danh sách tên của các sinh viên hoặc tên quốc gia. Sử dụng một collection hoặc array cho phép bạn nhanh chóng và dễ dàng thao tác một số lượng lớn các hạng mục.

Public [ tên biến ] là lệnh quy định rằng biến số đó có thể truy xuất hoặc được sử dụng bởi bất kỳ hàm thủ tục nào trong các mô-đun khác. Để có thể sử dụng được nó, bạn phải khai báo biến ấy nằm ngoài hàm thủ tục (tức là có thể ở phần đầu tiên trong mô-đun lệnh). Dạng biến số này trở nên hữu ích khi bạn có một giá trị biến được xuất từ một hàm thủ tục và bạn muốn chuyển giá trị ấy sang một hàm khác trong cùng một mô-đun lệnh.

Bước 2 : Bạn tao 1 Class Model, rồi gắn code dưới vào

Public WithEvents MyLabel As MSForms.Label
Public Sub MyLabel_Click()
HOME.HIENTHISOBAN = MyLabel.Caption
End Sub
Chọn nhiều Control trả về dữ liệu tương ứng trong VBA
Chọn nhiều Control trả về dữ liệu tương ứng trong VBA

HOME.HIENTHISOBAN = MyLabel.Caption : bạn cần chỉnh lại tên LABEL để hiển thị ra

III.DOWN FILE

CLICK VÀO ĐÂY ĐỂ TẢI DEMO

Như vậy, chúng tôi đã giới thiệu và hướng dẫn cho bạn về cách sử dụng tạo nhiều control.  Hy vọng rằng, bài viết này có thể giúp bạn nâng cao kĩ desgin giao diện trong USERFORM của mình.

Tham khảo các bài viết liên quan.

Phần mềm xuất nhập tồn bằng Excel miễn phí 2021

Cho phép nhập liệu số trong TEXTBOX

Cách dùng hàm UPPER LOWER PROPER trong EXCEL

One thought on “Chọn nhiều Control trả về dữ liệu tương ứng trong VBA

  1. Pingback: giới thiệu về VBA trong excel 21-VBA trong excel

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *