Cấu trúc, nguyên lý lưu trữ code VBA trong Excel

  • Thread starter Deleted member 1392
  • Ngày gửi
Trạng thái
Không mở trả lời sau này.
D

Deleted member 1392

Guest
Cấu trúc lưu trữ code VBA trong file Excel

Như trong bài viết ẩn module của vothanhthu (link ), việc khi chúng ta tác động đến file vbaProject.bin sẽ làm có ảnh hưởng đến cấu trúc cũng như code trong VBA, vậy nguyên nhân là do đâu?, chúng ta sẽ cùng tìm hiểu:

Các nội dung được lấy từ nguồn của Microsoft.

Trong Excel, chúng ta thường thấy Microsoft sử dụng các định dạng .xlsb, .xlsx, .xlsm... Bản chất của những tệp này là một vùng ZIP được nén lại. Khi giải nén, bạn sẽ có thế truy cập vào file vbaProject.bin, File này mang định dạng Compound File Binary Format (CFBF), và là file chứa toàn bộ thông tin macro của file.
Bạn cần đăng nhập để thấy hình ảnh


Khi mở file bằng Hex, ta sẽ thấy rất nhiều mã nhị phân khó hiểu. Đây không phải là cấu trúc thật của file, cái các bạn đang thấy chỉ là định dạng nhị phân đang được thể hiện ở dạng nén. Cấu trúc thật của file bao gồm rất nhiều tệp nhỏ (gọi là luồng) trong một tệp lớn vbaProject.bin
Bạn cần đăng nhập để thấy đính kèm


Trong các luồng, ta sẽ có một số luồng quan trọng như sau:
PROJECT: Xác định cấu trúc VBA, cấu hình nên GUI của VBA Editor
_VBA_PROJECT: Luồng này chứa cách macro được diễn giải trong VBA Editor
Dir: Chứa bố cục của toàn dự án VBA
Module: Chứa toàn bộ code thực tế mà chúng sẽ được thực thi

Bạn cần đăng nhập để thấy đính kèm


Quay trở lại phương pháp ẩn Module được vothanhthu trình bày, việc ta xoá đoạn Module=Module1 trong Hex, thực tế là ta đang tác động đến luồng PROJECT. Như mình đã đề cập ở trên, luồng này cấu hình nên những gì được nhìn thấy trong VBA Editor. Việc bạn việc xoá Module=Module1 sẽ làm biến mất tên Module trong VBA Editor nhưng lại không hề làm mất đi code thực thi. Vì thực tế, code đang được lưu ở luồng Module. Lưu ý, bạn không thể tác động đến module "Thisworkbook" và "ThisDocument".

Qua bài viết chắc các bạn cũng hình dung phần nào cấu trúc của tệp vbaProject.bin. Trong bài viết tiếp theo, chúng ta sẽ tìm hiểu làm sao chúng ta có thể biết được cấu trúc chính xác của một file Excel, Thậm chí là có thể trích xuất code VBA mà không cần mở file, bỏ qua toàn bộ bảo mật của file.
 
Trạng thái
Không mở trả lời sau này.
Top