befaint
|||||||||||||
- Tham gia
- 6/1/11
- Bài viết
- 14,581
- Được thích
- 19,782
Bài 4. Biến trong VBA
(Danh sách các bài viết về VBA xem ở đây Index - Các bài viết về VBA)
1. Các kiểu dữ liệu
(Tham khảo)

2. Khai báo biến và đặt tên biến trong VBA
- Mỗi chương trình ứng dụng thường xử lý nhiều dữ liệu, ta dùng khái niệm "biến" để lưu trữ dữ liệu trong bộ nhớ máy tính, mỗi biến lưu trữ một dữ liệu của chương trình.
- Mặc dù VBA không yêu cầu (*), nhưng ta nên định nghĩa rõ ràng từng biến trước khi truy xuất nó để code của chương trình được rõ ràng, dễ hiểu, dễ bảo trì và phát triển.
- Định nghĩa 1 biến là :
• Định nghĩa tên nhận dạng cho biến,
• Kết hợp kiểu với biến để xác định cấu trúc dữ liệu của biến,
• Định nghĩa tầm vực (phạm vi) truy xuất biến.
- Cú pháp định nghĩa biến:
+ Static, Public, Private, Dim (**): Các từ khóa để khai báo một biến.
+ AVariable: Tên biến cần khai báo.
Tại từng thời điểm, biến chứa một giá trị (nội dung) cụ thể. Theo thời gian nội dung của biến sẽ bị thay đổi theo tính chất xử lý của code.
Cách đặt tên cho một biến :
• Tên biến có độ dài tối đa 255 ký tự
• Ký tự đầu tiên phải là một ký tự chữ (letter), không phải ký tự số (0-9)
• Các ký tự tiếp theo có thể là các ký tự chữ (letter), ký số (digit), dấu gạch dưới
• Tên biến không được chứa các ký tự đặc biệt như các ký tự : ^, &, ), (,%, $, #, @, !, ~, +, -, *, …
• VBA không phân biệt chữ HOA hay chữ thường trong tên biến.
Ví dụ:
Tên biến hợp lệ:
Tên biến không hợp lệ:
Các lưu ý khi đặt tên biến:
- Nên chọn tên biến ngắn gọn nhưng thể hiện rõ ý nghĩa.
Ví dụ: Ta muốn có một biến để lưu mã khác hàng thì có thể đặt: MaKH
- Khi viết tên biến ta nên viết hoa chữ đầu tiên của một từ có ý nghĩa.
Ví dụ: Đặt tên biến xác định khối lượng, số tiền: Kluong, SoTien
- Không được dùng tên biến trùng với các từ khoá như: Print, Sub, End… (từ khóa là những từ mà ngôn ngữ VBA đã dùng cho những thành phần xác định của ngôn ngữ).
+ As: Từ khóa để gán với kiểu dữ liệu nào cho biến.
+ Type: Kiểu dữ liệu cần gán cho biến đang khai báo. Nếu bỏ qua [As Type] thì biến đó mặc định nhận kiểu dữ liệu Variant.
Chú thích (*): Có hay không bắt buộc khai báo biến trong VBA
- Khi ở trên cùng trong các môi trường VBA Project (Worksheet, Workbook, Module, Class module, UserForm) có dòng Option Explicit thì các biến phải được khai báo trước khi sử dụng.
- Hai cách thiết lập Option Explicit:
Một là nhập trực tiếp ở trên cùng của môi trường viết code.
Hai là thiết lập Options trong VBA, yêu cầu khai báo biến (mục Require Variable Declaration được chọn) thì ở trên cùng trong các môi trường VBA Project (Worksheet, Workbook, Module, Class module, UserForm) sẽ tự động thêm dòng Option Explicit.


Chú thích (**): Giải thích các từ khóa đứng trước tên biến trong cú pháp khai báo biến
Public, Private, Static là các từ khoá dùng để xác định phạm vi (tầm vực) của một vật thể (variable, sub, hoặc function). (Tham khảo bài #10)
Phạm vi/ tầm vực có hai tính chất: tính chất "có thể thấy được" và tính chất "tồn tại".
- Tồn tại: chỉ áp dụng cho biến (variable), không tồn tại có nghĩa là chưa được thiết lập, hoặc đã bị huỷ.
- Có thể thấy được: áp dụng cho mọi loại (variable, sub, hoặc function). Tùy theo cách khai báo mà vật thể có thể thấy được trong một phạm vi này nhưng lại bị che khuất trong phạm vi khác. Lưu ý là vật thể có thể vẫn tồn tại, chỉ ở ngoài phạm vi thì không chạm được tới nó mà thôi.
Ở nội dung phần này, ta chỉ xét tới variable.
• Public: phạm vi toàn cục, ở đâu trong VBAProject cũng có thể thấy / dùng được.
- Cấu trúc:
- Tồn tại: Biến chỉ giải phóng khi thoát file.
- Vị trí:
Để ngoài Sub/Function, trên cùng của môi trường VBA Project (Worksheet, Workbook, Module, Class module, UserForm).
- Ví dụ:
Module1:
Module2:
• Private: phạm vi nội bộ khi xét cả VBAProject, nó khai báo trên cùng module thì nó là toàn cục của module đó, các code trong module đó đều thấy nó.
- Cấu trúc:
- Tồn tại: Biến chỉ giải phóng khi thoát file.
- Vị trí:
Để ngoài Sub/Function, trên cùng của môi trường VBA Project (Worksheet, Workbook, Module, Class module, UserForm).
- Ví dụ:
Module1:
Module2:
• Dim: Khai báo biến ở phạm vi toàn cục trong môi trường được khai báo (để ở ngoài Sub/ Function, trên cùng module) nhưng là phạm vi nội bộ khi xét cả VBAProject, hoặc nội bộ trong Sub/ Function.
- Cấu trúc:
- Tồn tại: Biến giải phóng khi thoát file (phạm vi toàn cục của module), giải phóng khi thoát Sub/Function (phạm vi nội bộ của Sub/Function).
- Vị trí:
+ Để ở ngoài Sub/ Function: Khai báo biến ở phạm vi toàn cục của môi trường khai báo.
+ Khai báo trong Sub/ Function: Phạm vi nội bộ của Sub/Function.
• Static: Khai báo biến ở phạm vi nội bộ trong Sub/ Function
- Cấu trúc:
- Tồn tại: Biến chỉ giải phóng khi thoát file.
- Vị trí: Chỉ đặt trong Sub/Function.
Ví dụ:
Lưu ý: Tất cả các kiểu khai báo biến, kể cả Public hay Static đều được giải phóng khi code bị bất cứ lỗi nào làm dừng chương trình hoặc khi VBA được Reset.
(Danh sách các bài viết về VBA xem ở đây Index - Các bài viết về VBA)
1. Các kiểu dữ liệu
(Tham khảo)

2. Khai báo biến và đặt tên biến trong VBA
- Mỗi chương trình ứng dụng thường xử lý nhiều dữ liệu, ta dùng khái niệm "biến" để lưu trữ dữ liệu trong bộ nhớ máy tính, mỗi biến lưu trữ một dữ liệu của chương trình.
- Mặc dù VBA không yêu cầu (*), nhưng ta nên định nghĩa rõ ràng từng biến trước khi truy xuất nó để code của chương trình được rõ ràng, dễ hiểu, dễ bảo trì và phát triển.
- Định nghĩa 1 biến là :
• Định nghĩa tên nhận dạng cho biến,
• Kết hợp kiểu với biến để xác định cấu trúc dữ liệu của biến,
• Định nghĩa tầm vực (phạm vi) truy xuất biến.
- Cú pháp định nghĩa biến:
PHP:
[Static|Public|Private|Dim] AVariable [As Type]
+ AVariable: Tên biến cần khai báo.
Tại từng thời điểm, biến chứa một giá trị (nội dung) cụ thể. Theo thời gian nội dung của biến sẽ bị thay đổi theo tính chất xử lý của code.
Cách đặt tên cho một biến :
• Tên biến có độ dài tối đa 255 ký tự
• Ký tự đầu tiên phải là một ký tự chữ (letter), không phải ký tự số (0-9)
• Các ký tự tiếp theo có thể là các ký tự chữ (letter), ký số (digit), dấu gạch dưới
• Tên biến không được chứa các ký tự đặc biệt như các ký tự : ^, &, ), (,%, $, #, @, !, ~, +, -, *, …
• VBA không phân biệt chữ HOA hay chữ thường trong tên biến.
Ví dụ:
Tên biến hợp lệ:
PHP:
Bien1_dong
KhoiLuong
PHP:
Bien-1: ''Vì có dấu gạch ngang
Bien&1: ''Vì có ký tự &
1Bien_dong: ''Vì có ký tự số ở đầu
Các lưu ý khi đặt tên biến:
- Nên chọn tên biến ngắn gọn nhưng thể hiện rõ ý nghĩa.
Ví dụ: Ta muốn có một biến để lưu mã khác hàng thì có thể đặt: MaKH
- Khi viết tên biến ta nên viết hoa chữ đầu tiên của một từ có ý nghĩa.
Ví dụ: Đặt tên biến xác định khối lượng, số tiền: Kluong, SoTien
- Không được dùng tên biến trùng với các từ khoá như: Print, Sub, End… (từ khóa là những từ mà ngôn ngữ VBA đã dùng cho những thành phần xác định của ngôn ngữ).
+ As: Từ khóa để gán với kiểu dữ liệu nào cho biến.
+ Type: Kiểu dữ liệu cần gán cho biến đang khai báo. Nếu bỏ qua [As Type] thì biến đó mặc định nhận kiểu dữ liệu Variant.
Chú thích (*): Có hay không bắt buộc khai báo biến trong VBA
- Khi ở trên cùng trong các môi trường VBA Project (Worksheet, Workbook, Module, Class module, UserForm) có dòng Option Explicit thì các biến phải được khai báo trước khi sử dụng.
- Hai cách thiết lập Option Explicit:
Một là nhập trực tiếp ở trên cùng của môi trường viết code.
Hai là thiết lập Options trong VBA, yêu cầu khai báo biến (mục Require Variable Declaration được chọn) thì ở trên cùng trong các môi trường VBA Project (Worksheet, Workbook, Module, Class module, UserForm) sẽ tự động thêm dòng Option Explicit.


Chú thích (**): Giải thích các từ khóa đứng trước tên biến trong cú pháp khai báo biến
PHP:
[Static|Public|Private|Dim] AVariable [As Type]
Phạm vi/ tầm vực có hai tính chất: tính chất "có thể thấy được" và tính chất "tồn tại".
- Tồn tại: chỉ áp dụng cho biến (variable), không tồn tại có nghĩa là chưa được thiết lập, hoặc đã bị huỷ.
- Có thể thấy được: áp dụng cho mọi loại (variable, sub, hoặc function). Tùy theo cách khai báo mà vật thể có thể thấy được trong một phạm vi này nhưng lại bị che khuất trong phạm vi khác. Lưu ý là vật thể có thể vẫn tồn tại, chỉ ở ngoài phạm vi thì không chạm được tới nó mà thôi.
Ở nội dung phần này, ta chỉ xét tới variable.
• Public: phạm vi toàn cục, ở đâu trong VBAProject cũng có thể thấy / dùng được.
- Cấu trúc:
PHP:
Public AVariable [As Type]
- Vị trí:
Để ngoài Sub/Function, trên cùng của môi trường VBA Project (Worksheet, Workbook, Module, Class module, UserForm).
- Ví dụ:
Module1:
PHP:
Option Explicit
'Yeu cau phai khai bao bien'
Public Var1 As Long
Public Var2 As Long
Sub GanGiaTri()
'Gan gia tri vao bien'
'Do khai bao toan cuc (tren cung module) nen duoc phep su dung 2 bien nay'
Var1 = 10
Var2 = 20
End Sub
Sub XemGiaTri()
'Chay Sub GanGiaTri roi chay Sub nay'
MsgBox "Var1 is: " & Var1 & vbNewLine & "Var2 is: " & Var2
'Gia tri cua 2 bien Var1 va Var2 van ton tai'
End Sub
PHP:
Option Explicit
'Yeu cau phai khai bao bien'
Sub XemGT()
'Chay Sub Module1.GanGiaTri roi chay Sub nay'
MsgBox "Var1 is: " & Var1 & vbNewLine & "Var2 is: " & Var2
'Hai bien Var1 va Var2 da duoc khai bao trong Module1'
'Gia tri cua 2 bien Var1 va Var2 van ton tai'
End Sub
- Cấu trúc:
PHP:
Private Avariable [As Type]
- Vị trí:
Để ngoài Sub/Function, trên cùng của môi trường VBA Project (Worksheet, Workbook, Module, Class module, UserForm).
- Ví dụ:
Module1:
PHP:
Option Explicit
'Yeu cau phai khai bao bien'
Private Var1 As Long
Private Var2 As Long
Sub GanGiaTri()
'Gan gia tri vao bien'
'Do khai bao toan cuc (tren cung module) nen duoc phep su dung 2 bien nay'
Var1 = 10
Var2 = 20
End Sub
Sub XemGiaTri()
'Chay Sub GanGiaTri roi chay Sub nay'
MsgBox "Var1 is: " & Var1 & vbNewLine & "Var2 is: " & Var2
'Gia tri cua 2 bien Var1 va Var2 van ton tai'
End Sub
PHP:
Option Explicit
'Yeu cau phai khai bao bien'
Sub XemGT()
'Chay Sub Module1.GanGiaTri roi chay Sub nay'
MsgBox "Var1 is: " & Var1 & vbNewLine & "Var2 is: " & Var2
'Hai bien Var1 va Var2 chua duoc khai bao, xay ra loi: Variable not defined'
End Sub
- Cấu trúc:
PHP:
Dim AVariable [As Type]
- Vị trí:
+ Để ở ngoài Sub/ Function: Khai báo biến ở phạm vi toàn cục của môi trường khai báo.
+ Khai báo trong Sub/ Function: Phạm vi nội bộ của Sub/Function.
• Static: Khai báo biến ở phạm vi nội bộ trong Sub/ Function
- Cấu trúc:
PHP:
Static AVariable [As Type]
- Vị trí: Chỉ đặt trong Sub/Function.
Ví dụ:
PHP:
Sub Vidu_Static()
Static a As Long
a = a + 10
MsgBox "a = " & a
'Chay Sub nay 3 lan: Bien a van duoc luu gia tri sau cac lan Sub duoc chay'
'Lan 1: a=10'
'Lan 1: a=20'
'Lan 1: a=30'
End Sub
Lưu ý: Tất cả các kiểu khai báo biến, kể cả Public hay Static đều được giải phóng khi code bị bất cứ lỗi nào làm dừng chương trình hoặc khi VBA được Reset.
File đính kèm
Lần chỉnh sửa cuối: