Lý thuyết:
VBA không phải là ngôn ngữ dịch ra exe rồi chạy. Code VBA phải chạy trên nền tảng VBA.
Chạy trên nền tảng đặc thù thì chậm hơn code exe trên nền tảng chủ của máy (Windows, MacOS, Linux,...) nhiều. Đó là lý do chính tại sao C++ chạy nhanh hơn Java rất nhiều lần, và C nếu viết giỏi sẽ chạy nhanh gần bằng code ASM (code máy).
Một trong những cái lợi của nền tảng đặc thù là bọn này có cỗ máy dọn rác cho nên tránh được lỗi rò bộ nhớ. Nếu bạn nào đã từng viết C/C++ rồi sẽ thấy đó là cái bug đáng gờm nhất của hai ngôn ngữ này. Đổi lại, như tôi nói trên chúng có tốc độ khong thể chối cãi. Nếu bạn đọc bài của tôi nhiều sẽ thấy tôi có từng nói Pyhton dựa vào các thư viện viết bằng C cho neentoocs độ đáng nẻ, chứ chính nó chạy trên nền tảng đặc thù.
Cỗ máy dọn rác (garbage collector) là gì?
Là một phần mềm có nhiệm vụ đi gồm thâu lại những mảnh trong bộ nhớ không dùng tới nữa. Chỗ gồm thâu này sẽ lại trở thành free, các lệnh cần bộ nhớ như lệnh tạo chuỗi, lệnh tạo đối tượng (object) sẽ có nhiều chỗ trống hơn để làm việc.
Khi nào thì cỗ máy biết đấy là rác để gom về dùng lại?
Khi vùng nhớ ấy không còn cái gì trỏ vào.
Đối với chuỗi, nếu bạn gán chuỗi với trị khác thì vùng nhớ chứa trị cũ sẽ được giải nhiệm. Cỗ dọn rác chiếu vào đấy để đưa vùng nhớ này vào vùng free agents. Vì vậy, gặp chương trình dùng chuỗi quá dài thì người ta tiết kiệm biooj nhớ bằng cách dùng xong ròi thì gán "" cho nó.
Đối với mảng động thì khi bạn dùng lệnh Erase. VBA sẽ tách tên mảng ra khỏi cái vùng nhớ trên. Vùng nhớ trước đó là mảng, bây giờ là con vô thừa nhận. Và cỗ máy sẽ nhận ra chúng.
Đối với đối tượng thì khi bạn dùng lệnh Set a = đối tượng nào đó thì VBA sẽ trỏ biến a vào đối tượng ấy, cũng như ký hợp đồng mướn người. Sau đó bạn Set a= Nothing thì lệnh này tách tên biến khỏi đối tượng. Khi đôi tượng không còn biến nào trỏ vào nữa thì nó không còn ràng buộc hợp đồng nào và trở thành thất nghiệp. Và cỗ dọn rác sẽ đưa vùng nhớ của nó vào chỗ "thằng này heets xài rồi, cứ việc xiết nhà đát của nó cho thằng khác đi. Vì vậy nếu bạn đọc các code viết cẩn thận sẽ thấy người ta Set Nothing sau khi không cần dùng biến ấy nữa.
Chú thích: khi Sub/Function chạy đến lệnh Exit/End thì VBA sẽ hủy các biến khai báo nội (ngầm hay rõ gì cũng vây) trong Sub/Function. Còng việc hủy này tự động tách rời chúng ra khỏi các vùng nhớ, - trừ oại biến không bị hủy là biến Static. Việc thâu hồi vùng nhớ sau đấy vẫn theo luật tôi nêu trên.
Chú thích 2: về việc nhiều biến trỏ vào 1 đối tượng (quan hệ N-1). Đối tượng trong trường hợp này chỉ có 1. Nếu mọt trong những cong việc gây tai nạn cho nó thì các chủ hợp đòng khác sẽ thấy nó đang bị thương. Nếu nó có cái xe tải mùa bóng đá vừa rôi cầm cố mất thì tất cả chủ hợp đồng sẽ thấy nó chả tải hàng cho ai cả. Việc nó có hy vọng tiếp tục hay không tùy vào chỗ có ngân hàng nào ký với nó một cái hợp đồng cho vay tiền chuộc xe. Việc nó không khả năng tiếp tục hợp đồng cũng chả lien quan đến nó thất nghiệp hay không. Các chủ phải tự biết mà chờ nó chuộc xe hay giúp nó chuộc xe hay hủy hợp đ\ồng. Khi mọi chủ đều tuyên bố hoàn tất hoặc hủy hợp đồng thì nó mới chính thức thất nghiệp.