Biến Enum

  • Thread starter bvtvba
  • Ngày gửi
B

bvtvba

Guest
Đôi khi có những biến số được sử dụng liên tục, và có thể sử dụng ở bất cứ đâu, lúc đó các bạn có thể nghĩ tới Enum.
Giả sử như bây giờ mình thực hiện công việc sau:
Mã:
Cells(5,1).Value = 4
Cells(5,2).Value = "tuhocvba.net"
Cells(5,3).Value = "VBA"
Nếu nhìn vào đây thì hơi khó hiểu, nếu quan sát Excel, bạn sẽ hình dung ra được là mình đang làm việc trên cột dữ liệu nào. Chúng mình sẽ hiểu được là đang làm việc với cột A, cột B, cột C.
Nếu số lượng cột dữ liệu tăng nhiều hơn, như 10 cột dữ liệu chẳng hạn, khi đó phải tưởng tượng mình đang làm việc với cột dữ liệu nào thật là phiền phức.
Tuy nhiên nếu sử dụng khai báo Enum, việc này lại trở nên dễ dàng hơn.
Mã:
Enum enmColumnsNo
  No = 1
  Name = 2
  GoodLang = 3
End Enum
 
Sub Test()
  Cells(5,enmColumnsNo.No).Value = 4
  Cells(5,enmColumnsNo.Name).Value = "tuhocvba.net"
  Cells(5,enmColumnsNo.GoodLang).Value = "VBA"
End Sub
Ở trên, No, Name, GoodLang là tiêu đề các cột dữ liệu. Ví vậy mình đặt tên biến Enum là các tên này luôn, khi code sẽ thuận tiện hình dung hơn.

Như vậy khi phải làm việc với hàng dữ liệu nào, hay cột dữ liệu nào, chúng ta có thể sử dụng tiêu đề các hàng (cột) dữ liệu này làm tên biến Enum, khi đó code sẽ thuận tiện và dễ hiểu hơn. Người đọc code cũng sẽ cảm thấy dễ hiểu hơn.

Làm việc với số thì như trên, nhưng khi làm việc với ký tự thì Enum không hỗ trợ được, khi đó chúng ta lại phải dùng Dictionary:
Ở đây chỉ là một đoạn code ví dụ đơn giản nhất:
Mã:
Sub Test()
  'Khai bao Dictionary
  Dim myDic As Object
  Set myDic = CreateObject("Scripting.Dictionary")
 
  'Nap gia tri cho Dictionary
  myDic.Add "No", "No"
  myDic.Add "Name", "Ten"
  myDic.Add "GoodLang", "NgonNgu"
 
  Debug.Print "No la:" & myDic.Item("No")
  Debug.Print "Name la:" & myDic.Item("Name")
  Debug.Print "GoodLang la:" & myDic.Item("GoodLang")
 
End Sub
Kết quả:
Mã:
No la:No
Name la:Ten
GoodLang la:NgonNgu
Để làm rõ hơn hiệu quả của những kiến thức trên, cần có thêm nhiều ví dụ để mọi người dễ hình dung. Mình sẽ sưu tập và sẽ bổ sung thường xuyên vào topic này.
 
Top