CÔNG TY CỔ PHẦN BLUESOFTS

CÔNG TY CỔ PHẦN BLUESOFTS

Giải thuật tạo danh sách liên kết động không dùng array trong VBA

 Lập trình tạo danh sách động bằng cách liên kết các biến nhớ, mỗi biến được khai báo là một kiểu class lưu trữ các trường thông tin. Đây là phương pháp lập trình khá phổ biến trong các ngôn ngữ Pascal/Delphi, C++ Tuy nhiên trong VBA tôi thấy ít được nói đến, thậm chí là cách dùng Class Module cũng ít được ứng dụng. Trong buổi thảo luận này tôi chia sẻ cách làm việc với Class Module để tạo danh sách liện kết động.

Tóm lược nội dung thảo luận ngày 26-09-2021

1. Mô hình danh sách liên kết



Mỗi bản ghi dữ liệu ta khái niệm một gói tin, gọi là "Node". Node chúng ta sẽ sử dụng Class Module để tạo.

2. Dữ liệu ghi chép trong array 2D trong VBA
 


3. Dữ liệu ghi chép trong array 2D và liên hệ tới Node



Trong hình vẽ trên tôi mô tả array lưu dữ liệu của bảng dữ liệu và cách ta sẽ lưu trong node như thế nào. Từ đây các bạn hình dùng cách tạo các trường thông tin trong node.

4. Các gói tin có thể được lưu trong kiểu dữ liệu người dùng khai báo "Type"
 


5. Khai báo Class Module để tạo node
 


Vào menu Insert -> Class Module để tạo class. Đặt tên class là clsNode 
Trong class "clsNode", khai báo các property để lưu thông tin. Nếu bạn chưa được học kỹ về khai báo trong class module thì có thể khai báo đơn giản như làm với biến, nhưng hãy dùng từ khóa Public thay cho Dim. Ví dụ tôi khai báo trong class module với 3 trường thông tin: 

Public Ten As String
Public Luong As Double
Public NextNode As clsNode
 
6. Sơ đồ quan hệ giữa các node


7. Lập trình VBA tạo danh sách các node và liên kết nhau
 

 
Trong thủ tục "TaoDanhSachNode" tôi viết trên là duyệt từng dòng dữ liệu trên worksheet, chép vào các node. Bình thường chúng ta là làm trên array. Sau khi tạo danh sách các node thì tôi gọi thủ tục đọc dữ liệu từng node "ReadList", cuối cùng giải phòng bộ nhớ "DestroyList".

 8. Cách thức đọc dữ liệu trong danh sách node


9. Giải phòng bộ nhớ của danh sách node
 


Các bạn lưu ý là danh sách node được móc nối nhau bới trường "NextNode", muốn xóa một node thì phải lưu "NextNode" ra một biến trung gian, sau khi xóa xong thì gán lại biến Node vào biến trung gian để tiếp tục quy trình vòng lặp xóa các node kế tiếp. Với bài toán chèn, xóa các node ta cần hiểu nguyên lý này.

10. Lưu ý khi dùng danh sách liên kết
 


11. Lời kết