Để hiển bản chất của biến Static trong VBA chúng ta xem qua ví dụ
Ví dụ 1: biến VBA Access
' Nút lệnh khi click vào Command1
Private Sub Command1_Click()
Dim b1 As Integer
Dim b2 As Integer
b1 = b1 + 1
b2 = b2 + 1
MsgBox "Bien B1: " & b1 & ", B2: " & b2
End Sub
' Nút lệnh khi click vào Command2
Private Sub Command2_Click()
MsgBox "Bien B1: " & b1 & ", B2: " & b2
End Sub
Kết luận:
Chúng ta click vào nút lệnh Command1 thì biến b1 và b2 được khởi tạo giá trị là 1 và + thêm 1,
Nhưng khi click qua nút lệnh Command2 thì giá trị biến b1 và b2 không còn.
* Qua ví dụ này ta thấy vòng đời của biến b1,b2 chỉ tồn tại trong Sub khai báo, kết thúc khi lệnh chạy đến End Sub
Private Sub Command1_Click()
....
End Sub
Ví dụ 2: biến VBA Access
' Biến khai báo ngoài sub
Dim b1 As Integer
Dim b2 As Integer
Private Sub Command1_Click()
b1 = b1 + 1
b2 = b2 + 1
MsgBox "Bien B1: " & b1 & ", B2: " & b2
End Sub
Private Sub Command2_Click()
MsgBox "Bien B1: " & b1 & ", B2: " & b2
End Sub
Kết luận:
Chúng ta click vào nút lệnh Command1 thì biến b1 và b2 được khởi tạo giá trị là 1 và + thêm 1,
Khi click qua nút lệnh Command2 thì giá trị biến b1 và b2 lấy từ Command1_Click.
Click vào lại Command1 thì giá trị lại tăng lên 1, giá trị vẫn giữ giữa các sự kiện nút lệnh.
* Qua ví dụ này ta thấy vòng đời của biến b1,b2 tồn tại từ lúc mở FORM cho đến khi tắt Form
- Sau khi tạo biến xong, ta tắt form và mở lại giá trị biến VBA sẽ về 0
Ví dụ 3: biến VBA Access
Private Sub Command1_Click()
Dim b1 As Integer
Static b2 As Integer
b1 = b1 + 1
b2 = b2 + 1
MsgBox "Bien B1: " & b1 & ", B2: " & b2
End Sub
Private Sub Command2_Click()
MsgBox "Bien B1: " & b1 & ", B2: " & b2
End Sub
Kết luận:
Chúng ta click vào nút lệnh Command1 thì biến b1 được +1 và b2 +1
Khi click qua nút lệnh Command2 thì giá trị biến b1 và b2 lại = rỗng
Click vào lại Command1 thì giá trị b1 khởi tạo lại, còn biến b2 (có kiểu STATIC) được tăng lên + (cộng dồn từ lần click trước)
* Qua ví dụ này ta thấy vòng đời của biến b2 là kiểu static, tồn tại trong phạm vi của Command1_Click nhưng khi chạy lại lênh Command2_Click thì biến b2 vẫn giữ giá trị nhưng không khởi tại lại như biến b1