Home » VBA Excel » VBA Excel Biến trong VBA Excel

VBA Excel Biến trong VBA Excel

viết bởi Lê Quốc Thái
  1. Loạt các bài viết có liên quan chuyên đề VBA:
  2. VBA Excel Hộp thoại thông báo
  3. VBA Excel Biến trong VBA Excel
  4. VBA Excel sử dụng Scripting Dictionary
  5. VBA Excel Biến trong VBA Excel
  6. VBA Excel Workbook, worksheet
  7. VBA Excel Range, Cells
  8. VBA Excel Hàm trong Excel VBA
  9. VBA Excel Events, Application Object
  10. VBA Excel Function and Sub Excel VBA
  11. VBA Excel Array Mảng trong Excel VBA
  12. VBA Excel FileSystemObject trong Excel VBA
  13. VBA Excel Collection trong Excel VBA
  14. VBA Excel Hashtable trong Excel VBA
  15. VBA Excel Stack trong Excel VBA
  16. VBA Excel Queue trong Excel VBA
  17. VBA Excel SortedList Excel VBA
  18. VBA Excel ArrayList Excel VBA
  19. VBA Excel Ví dụ về Scripting Dictionary
  20. Sách VBA Excel 2016 power programming with vba (pdf)
1. Các kiểu dữ liệu

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 đơn giản của lệnh định nghĩa biến: 

            [Static|Public|Private|DimAVariable [As Type]

+ 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ệ
Bien1_dong
KhoiLuong
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.

                [Static|Public|Private|DimAVariable [As Type]

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, or function). 
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, or function). Tùy theo cách khai báo mà vật thể có thể thấy được trong một phạm vi 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 workbook cũng có thể thấy / dùng được. Tuy nhiên, nếu nó được khai báo trong module mức thấp thì qua mức cao hơn có thể phải thêm tên của module vào đầu để VBA biết nó ở đâu mà tìm.(TenModule.TenBien)

– Cấu trúc:
        Public AVariable [As Type]
– 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).

 

• 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:
        Private AVariable [As Type]
– 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).

• 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: 
        Dim AVariable [As Type]
– 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: 
        Static AVariable [As Type]
– Tồn tại: Biến chỉ giải phóng khi thoát file.

– Vị trí: Chỉ đặt trong Sub/Function.
*** Ghi chú: Về vùng nhớ của chương trình

 

– Trong chương trình có 2 vùng bộ nhớ, vùng heap và vùng stack. Biến khai báo toàn cục thuộc về heap và biến khai báo nội bộ Sub/Function là biến thuộc về stack. Các vật thể nằm trong vùng stack sẽ bị huỷ sau khi Sub/Function Exit hoặc End. Riêng biến Static thì luôn thuộc về heap bất kể nó là Public hay Private. Vì vậy biến Static không bị huỷ khi Sub/Function thoát.

– Phạm vi/tầm vực của heap và stack:
Heap là vùng nhớ chung của chương trình. Khi chương trình còn chạy thì những gì nằm trong heap còn tồn tại.
Stack là vùng nhớ riêng của mỗi function/sub. Khi chương đang ở trong function/code thì những gì trong stack còn tồn tại. Khi thoát function/sub thì những gì trong stack (của function/sub này) bị huỷ hết.

– Tất cả các kiểu khai báo biến, kể cả Public hay Static thì biến đều được giải phóng khi code bị bất cứ lỗi nào và dừng chương trình.

Tải file tham khảo: Dim | Public | Private | Static

Bài viết liên quan

1 nhận xét

Ngọc Thành June 16, 2019 - 2:37 PM

Bài viết hay quá, mình đang theo dõi site bạn, cám ơn bạn nhiều

Trả lời

Viết ý kiến của bạn