befaint
|||||||||||||
- Tham gia
- 6/1/11
- Bài viết
- 14,499
- Được thích
- 19,668
Bài 11. Dictionary
(Danh sách các bài viết về VBA xem ở đây Index - Các bài viết về VBA)
Dictionary (Dic) là một phần trong thư viện Microsoft Scripting Runtime (scrrun.dll), cho phép lưu trữ và truy xuất số lượng lớn Item theo Key duy nhất tương ứng.
1. Khai báo
1.1. Kiểu khai báo sớm
(Có Tooltip khi gọi Dic, phải thiết lập trong Tools/References)
- Trong cửa sổ VBA, Tools menu, References.
- Tìm và check vào mục “Microsoft Scripting Runtime” trong cửa sổ References – VBAProject.
Khai báo trong code:
1.2. Kiểu khai báo muộn
(Không có Tooltip khi gọi Dic, không cần thiết lập trong Tools/References).
Khai báo trong code:
2. Các phương thức
2.1. Add
Thêm Item (đối tượng) vào Dic, yêu cầu Key của Item phải chưa tồn tại trong Dic.
Key: Nhận dữ liệu là kiểu số hoặc kiểu chuỗi, yêu cầu Key là duy nhất trong Dic.
Item: Nhận kiểu dữ liệu là chuỗi hoặc số, bao gồm cả rỗng. Item có thể là một giá trị đơn hoặc một mảng (Array).
Ví dụ:
2.2. Exists
Kiểm tra sự tồn tại của một Key trong Dic. Trả về True nếu Key đó tồn tại trong Dic, ngược lại trả về False.
Ví dụ:
2.3. Remove
Xóa một Item trong Dic theo Key chỉ định. Nếu Key chỉ định chưa tồn tại trong Dic thì sẽ xảy ra lỗi.
Ví dụ:
2.4. RemoveAll
Xóa tất cả các Items có trong Dic.
Ví dụ:
2.5. Items
Trả về một mảng một chiều gồm toàn bộ Items có trong Dic.
Mảng một chiều này luôn có cận dưới bằng 0, dù khai báo Option Base 1
Ví dụ:
2.6. Keys
Trả về một mảng một chiều gồm toàn bộ Keys tồn tại trong Dic.
Mảng một chiều này luôn có cận dưới bằng 0, dù khai báo Option Base 1
Ví dụ:
3. Thuộc tính
3.1. Item
- Gọi Item theo Key chỉ định. Nếu Key chỉ định chưa tồn tại trong Dic, thì Dic sẽ tự động thêm (Add) Key đó vào, và Item ứng với Key đó là rỗng.
- Thay đổi giá trị của Item theo Key chỉ định. Nếu Key chỉ định chưa tồn tại trong Dic, thì Dic sẽ tự động thêm (Add) key đó vào, và Item ứng với Key đó có giá trị vừa đưa vào.
Ví dụ:
3.2. Key
Dùng để thay đổi giá trị mới của một Key chỉ định đã tồn tại trong Dic. Yêu cầu:
- Key chỉ định phải đã tồn tại trong Dic
- Giá trị mới của Key đó phải là duy nhất trong Dic (tức là có thể vẫn là giá trị cũ).
Ví dụ:
3.3. Count
Trả về số Items có trong Dic.
Ví dụ:
3.4. CompareMode
Thiết lập thuộc tính phân biệt chữ hoa chữ thường cho giá trị của Key.
BinaryCompare: (Giá trị mặc định của Dic) Phân biệt chữ hoa chữ thường
TextCompare: Không phân biệt chữ hoa chữ thường
Lưu ý: Thiết lập CompareMode cho Dic khi Dic rỗng (chưa có item nào trong Dic).
Ví dụ:
(Danh sách các bài viết về VBA xem ở đây Index - Các bài viết về VBA)
Dictionary (Dic) là một phần trong thư viện Microsoft Scripting Runtime (scrrun.dll), cho phép lưu trữ và truy xuất số lượng lớn Item theo Key duy nhất tương ứng.
1. Khai báo
1.1. Kiểu khai báo sớm
(Có Tooltip khi gọi Dic, phải thiết lập trong Tools/References)
- Trong cửa sổ VBA, Tools menu, References.
- Tìm và check vào mục “Microsoft Scripting Runtime” trong cửa sổ References – VBAProject.
Khai báo trong code:
PHP:
Dim Dic As Scripting.Dictionary
Set Dic = New Scripting.Dictionary
1.2. Kiểu khai báo muộn
(Không có Tooltip khi gọi Dic, không cần thiết lập trong Tools/References).
Khai báo trong code:
PHP:
Dim Dic As Object
Set Dic = CreateObject("Scripting.Dictionary")
2. Các phương thức
2.1. Add
PHP:
Dic.Add Key, Item
Key: Nhận dữ liệu là kiểu số hoặc kiểu chuỗi, yêu cầu Key là duy nhất trong Dic.
Item: Nhận kiểu dữ liệu là chuỗi hoặc số, bao gồm cả rỗng. Item có thể là một giá trị đơn hoặc một mảng (Array).
Ví dụ:
PHP:
Sub AddMethod()
'Dic.Add Key, Item'
Dim Dic As Object
Set Dic = CreateObject("Scripting.Dictionary")
Dic.Add "KeyA", 10
Dic.Add "KeyB", "Item2"
Dic.Add "KeyC", ""
Dic.Add "KeyD", Array(20, 50)
End Sub
2.2. Exists
PHP:
Dic.Exists(Key)
Ví dụ:
PHP:
Sub ExistsMethod()
'Dic.Exists(Key) '
Dim Dic As Object
Set Dic = CreateObject("Scripting.Dictionary")
Dic.Add "KeyA", 10
MsgBox Dic.Exists("KeyA") 'True'
End Sub
2.3. Remove
PHP:
Dic.Remove(Key)
Ví dụ:
PHP:
Sub RemoveMethod()
'Dic.Remove(Key) '
Dim Dic As Object
Set Dic = CreateObject("Scripting.Dictionary")
Dic.Add "KeyA", 10
Dic.Remove ("KeyA")
MsgBox Dic.Exists("KeyA") 'False'
End Sub
2.4. RemoveAll
PHP:
Dic.RemoveAll
Ví dụ:
PHP:
Sub RemoveAllMethod()
'Dic.RemoveAll'
Dim Dic As Object
Set Dic = CreateObject("Scripting.Dictionary")
Dic.Add "KeyA", 10
Dic.Add "KeyB", 20
Dic.RemoveAll
MsgBox Dic.Count '0'
End Sub
2.5. Items
PHP:
Dic.Items
Mảng một chiều này luôn có cận dưới bằng 0, dù khai báo Option Base 1
Ví dụ:
PHP:
Sub ItemsMethod()
'Dic.Items'
Dim Dic As Object, Arr()
Set Dic = CreateObject("Scripting.Dictionary")
Dic.Add "KeyA", 10
Dic.Add "KeyB", 20
Arr = Dic.Items 'LBound(Arr) = 0'
End Sub
2.6. Keys
PHP:
Dic.Keys
Mảng một chiều này luôn có cận dưới bằng 0, dù khai báo Option Base 1
Ví dụ:
PHP:
Sub KeysMethod()
'Dic.Keys'
Dim Dic As Object, Arr()
Set Dic = CreateObject("Scripting.Dictionary")
Dic.Add "KeyA", 10
Dic.Add "KeyB", 20
Arr = Dic.Keys 'LBound(Arr) = 0'
End Sub
3. Thuộc tính
3.1. Item
PHP:
Dic.Item(Key)
'Hoặc:'
Dic(Key)
- Thay đổi giá trị của Item theo Key chỉ định. Nếu Key chỉ định chưa tồn tại trong Dic, thì Dic sẽ tự động thêm (Add) key đó vào, và Item ứng với Key đó có giá trị vừa đưa vào.
Ví dụ:
PHP:
Sub ItemProperty()
'Dic.Item(Key)'
'Dic(Key) '
Dim Dic As Object, x, y, z
Set Dic = CreateObject("Scripting.Dictionary")
Dic.Add "KeyA", 10
Dic.Add "KeyB", 20
x = Dic.Item("KeyA") '10'
y = Dic("KeyA") '10'
z = Dic("KeyC")
Dic("KeyC") = 100
MsgBox Dic.Item("KeyC") '100'
MsgBox Dic.Count '3'
End Sub
PHP:
Dic.Key(Key) = NewKey
- Key chỉ định phải đã tồn tại trong Dic
- Giá trị mới của Key đó phải là duy nhất trong Dic (tức là có thể vẫn là giá trị cũ).
Ví dụ:
PHP:
Sub KeyProperty()
'Dic.Key(Key)=NewKey'
Dim Dic As Object
Set Dic = CreateObject("Scripting.Dictionary")
Dic.Add "KeyA", 10
Dic.Key("KeyA") = "KeyB"
End Sub
3.3. Count
PHP:
Dic.Count
Ví dụ:
PHP:
Sub CountProperty()
'Dic.Count '
Dim Dic As Object, i As Long
Set Dic = CreateObject("Scripting.Dictionary")
For i = 1 To 5
Dic.Add "Key" & i, ""
Next i
MsgBox Dic.Count '5'
End Sub
3.4. CompareMode
PHP:
Dic.CompareMode = BinaryCompare
Dic.CompareMode = TextCompare
BinaryCompare: (Giá trị mặc định của Dic) Phân biệt chữ hoa chữ thường
TextCompare: Không phân biệt chữ hoa chữ thường
Lưu ý: Thiết lập CompareMode cho Dic khi Dic rỗng (chưa có item nào trong Dic).
Ví dụ:
PHP:
Sub CompareModeProperty()
'Dic.CompareMode = vbBinaryCompare'
'Dic.CompareMode = vbTextCompare '
Dim Dic As Object, i As Long
Set Dic = CreateObject("Scripting.Dictionary")
With Dic
.CompareMode = vbBinaryCompare
'.CompareMode = vbTextCompare '
.Add "code", "lower"
.Add "CODE", "UPPER"
End With
End Sub
Lần chỉnh sửa cuối: