CÔNG TY CỔ PHẦN BLUESOFTS

Lập trình Userform-VBA tạo mục nhập có danh sách tìm kiếm với BSSearchEngine - Add-in A-Tools

Nhập liệu nâng cao trong Add-in A-Tools cho phép tìm và lọc trên sheet. Từ phiên bản v10.1 cho phép người dùng lập trình với class BSSearchEngine để tạo cửa sổ tìm kiếm này với điều khiển - control trên Userform. Tốc độ nhanh dù hàng trăm ngàn dòng. BSSearchEngine cung cấp phong phú các thủ tục, thuộc tính, sự kiện để tùy biến giao diện và hành động.
 
Khi cài A-Tools bạn mở tập tin tại đường dẫn dưới đây để xem mã nguồn ví dụ đầy đủ:
(*) File mã nguồn ví dụ: "C:\A-Tools\HELP & DEMOS\A-Tools VBA Programming\BSSearchEngine - Create DropDown List on control\BSSearchEngine - DropDown List.xlsm"

Chủ đề này tôi sẽ hướng dẫn từng bước lập trình từ cơ bản đến nâng cao với BSSearchEngine để tạo tính năng tìm và lọc với control trên Userform giống như chức năng Nhập liệu nâng cao trên sheet.
 
Video phần 01 - Tạo mục tìm và lọc đơn giản
 
 
Dòng lệnh tối thiểu để tạo cửa sổ tìm và lọc với control
 
+ Bước 1: Nhúng thư viện AddinATools.dll
 
Trong cửa sổ lập trình VBA, chọn Project bạn muốn lập trình, vào menu Tools -> References... tick chọn "AddinATools.dll"

+ Bước 2: Tạo Userform và chèn một control TextBox
 
Control phục vụ để nhập liệu là TextBox. Bạn có thể sử dụng các control ComboBox, BSEdit hoặc control nào cho phép nhập liệu.
 
 
Nhấp đúp chuột vào Userform - Vào chế độ soạn thảo code trong Userform. Copy đoạn code dưới đây dán vào.

Private Sub UserForm_Initialize() 
   Set SE_MAHH = New BSSearchEngine  'Khởi tạo BSSearchEngine
   SE_MAHH.Create txtMAHH, Range("DMHH")  'Nhập thông tin cho BSSearchEngine
   SE_MAHH.BoundColumn = 1  'Ngầm định là 1 - Chỉ ra vị trí cột giá trị lấy về control
   'EditControl: TextBox, ComboBox, BSEdit, Handle to Edit
   'DataSource: Excel Range (high speed!)
   ' Array2D
   ' ADODB.Recordset
End Sub 
'Sự kiện nhận giá trị chọn từ danh sách. Lấy giá trị trong mảng điền vào các control khác.
Private Sub SE_MAHH_OnAfterUpdate(RowIndex As Variant, Values As Variant, ByVal Text As String) 
   lblTenHH.Caption = Values(1, 2)  'Tên hàng
   txtDVT.Text = Values(1, 4)  'Ðơn vị tính
End Sub 
 
Giải thích mã nguồn
 
+ BSSearchEngine: là class thực hiện tìm và lọc dữ liệu khi thay đổi dữ liệu trên control nhập liệu.

Sub BSSearchEngine.Create(EditControl, DataSource, [DataHasHeaderRow As Boolean = True], [ShowHeader As Boolean = True]) 
Create() là thủ tục nạp các thông tin cho điều BSSearchEngine. Các tham số là:
    EditControl: có thể là: Handle of the editor control; BSAC.BSEdit Control; MSForms.TextBox, MSForms.ComboBox
    DataSource: có thể là Excel Range, Array2D, ADODB.Recordset
    DataHasHeaderRow: ngầm định là True, chỉ ra dữ liệu nguồn có dòng tiêu đề.
    ShowHeader: ngầm định là True, chỉ ra cửa sổ tìm kiếm hiển thị dòng tiêu đề không.
 
Trong mã nguồn:

SE_MAHH.Create txtMAHH, Range("DMHH")

Control txtMAHH sẽ được kích hoạt cửa sổ tìm kiếm và lọc, dữ liệu nguồn tại vùng NAME "DMHH" - Range("DMHH")
 
+ BSSearchEngine.BoundColumn: là số nguyên, ngầm định là 1 chỉ ra vị trí cột trong dữ liệu nguồn giá trị được lấy về control nhập liệu.
 
Muốn tương tác lệnh trong khi thực hiện các hành động thì phải lập trình sự kiện cho BSSearchEngine. 
Sự kiện OnAfterUpdate() chạy ngay sau khi giá trị được cập nhật vào control. Cấu trúc sự kiện là
Sub OnAfterUpdate(RowIndex, Values, Text As String) 

+ RowIndex: là mảng 1D chứa tạo độ các dòng được chọn.
+ Values: là mảng 2D chứa giá trị đã chọn từ danh sách.
+ Text: là chuỗi được nhập vào control.
 
Nếu bạn muốn chọn và nhận về sự kiện này nhiều dòng thì phải khai báo thuộc tính MultiInputColumns. 
 
+ BSSearchEngine.MultiInputColumns = True cho phép chọn và nhận về nhiều dòng giá trị. 
 
Kết quả khi chạy
 
 


Bài viết tiếp còn nữa ...