Một biến được khai báo trong một thủ tục hay một hàm, được coi là biến cục bộ. Khi thủ tục hay hàm này kết thúc thì biến cục bộ cũng được giải phóng.
Mỗi lần thủ tục hay hàm này được thực thi thì biến số cục bộ lại được làm mới lại và vì vậy giá trị trong những lần chạy trước đó không còn được lưu lại.
Mỗi lần chạy thủ tục trên thì sẽ hiển thị thông báo như sau:
[Lần 1]
[Lần 2]
Tôi không muốn như vậy, nói tóm lại là dù thủ tục trên kết thúc thì giá trị của biến số vẫn còn được lưu lại, đó là điều tôi muốn. Giá trị của biến số trong lần thực thi code trước đó vẫn được lưu lại để sử dụng trong lần chạy code tiếp theo, chúng ta nghĩ tới biến số tĩnh, hay còn gọi là biến static. Vì vậy tôi sẽ sửa lại code như sau:
[Lần 1]
[Lần 2]
Biến số tĩnh chỉ có thể được khai báo với tư cách là biến nội bộ, tức là khai báo bên trong hàm hay thủ tục. Tất cả các thủ tục hay hàm khác không thể sử dụng biến static. Biến static cũng không thể tồn tại với tư cách là một biến public.
Biến static không phải trong bất cứ trạng thái nào cũng lưu trữ dữ liệu. Chẳng hạn bây giờ tôi viết thêm một thủ tục mới trong module.
Bây giờ dù bạn chạy thủ tục Sample45 thì sẽ thấy biến Number không còn lưu giá trị trước đó nữa. Là vì module đã phát sinh thủ tục mới nên toàn bộ project VBA đã được biên dịch lại, cho nên giá trị biến static trước đó không còn được lưu trữ nữa.
Ngoài ra, nếu chạy tới lệnh End như sau, thì biến static cũng bị làm sạch, không còn lưu trữ dữ liệu.
Nguồn tham khảo và dịch:
Mỗi lần thủ tục hay hàm này được thực thi thì biến số cục bộ lại được làm mới lại và vì vậy giá trị trong những lần chạy trước đó không còn được lưu lại.
Mã:
Sub Sample44()
Dim Number As Long
MsgBox Number
Number = Number + 1
MsgBox Number
End Sub
[Lần 1]
Bạn cần đăng nhập để thấy đính kèm
[Lần 2]
Bạn cần đăng nhập để thấy đính kèm
Tôi không muốn như vậy, nói tóm lại là dù thủ tục trên kết thúc thì giá trị của biến số vẫn còn được lưu lại, đó là điều tôi muốn. Giá trị của biến số trong lần thực thi code trước đó vẫn được lưu lại để sử dụng trong lần chạy code tiếp theo, chúng ta nghĩ tới biến số tĩnh, hay còn gọi là biến static. Vì vậy tôi sẽ sửa lại code như sau:
Mã:
Sub Sample45()
Static Number As Long
MsgBox Number
Number = Number + 1
MsgBox Number
End Sub
Bạn cần đăng nhập để thấy đính kèm
[Lần 2]
Bạn cần đăng nhập để thấy đính kèm
Biến số tĩnh chỉ có thể được khai báo với tư cách là biến nội bộ, tức là khai báo bên trong hàm hay thủ tục. Tất cả các thủ tục hay hàm khác không thể sử dụng biến static. Biến static cũng không thể tồn tại với tư cách là một biến public.
Biến static không phải trong bất cứ trạng thái nào cũng lưu trữ dữ liệu. Chẳng hạn bây giờ tôi viết thêm một thủ tục mới trong module.
Mã:
Sub Sample46()
End Sub
Ngoài ra, nếu chạy tới lệnh End như sau, thì biến static cũng bị làm sạch, không còn lưu trữ dữ liệu.
Mã:
Sub Sample47()
Static Number As Long
MsgBox Number
Number = Number + 1
If MsgBox(Number & vbCrLf & "Ban muon xoa gia tri khong?", vbYesNo) = vbYes Then
End
End If
End Sub
Bạn cần đăng nhập để thấy link