什么是VBAProject
在每一个带有VBA代码的文件里,都会有一个VBAProject,在VBA编辑器的工程资源窗口可以看到:
每个文件都有一个叫做VBAProject(默认名称,可以修改)的东西。
我们在编写VBA代码的时候,就是通过这里来点击添加模块、编写代码的。
01
2007版本结构
使用7z软件打开一个2007版本以上的Excel,可以看到有一个vbaProject.bin的文件,这里面就是保存了VBA相关的一些信息:
使用7z软件可以进一步的打开,主要的文件信息:
代码语言:javascript复制 0 Root Entry
1 Root EntryVBA
2 Root EntryVBASheet1
3 Root EntryVBA__SRP_5
4 Root EntryVBA__SRP_4
5 Root EntryVBAThisWorkbook
6 Root EntryVBA__SRP_6
7 Root EntryVBA__SRP_7
8 Root EntryVBASheet2
9 Root EntryVBA__SRP_8
10 Root EntryVBA__SRP_9
11 Root EntryVBASheet3
12 Root EntryVBA__SRP_a
13 Root EntryVBA__SRP_b
14 Root EntryVBAMMain
15 Root EntryVBA__SRP_2
16 Root EntryVBA__SRP_3
17 Root EntryVBA_VBA_PROJECT
18 Root EntryVBAdir
19 Root EntryVBA__SRP_0
20 Root EntryVBA__SRP_1
21 Root EntryPROJECTwm
22 Root EntryPROJECT
Root Entry这个顶层目录名称7z软件打开时看不到的。
MMain是模块的名称,其他一些也会视具体的文件不相同,但主要的VBAdir、PROJECTwm、PROJECT等是一定会有的。
02
03版本结构
同样使用7z软件打开一个.xls后缀的03版本带VBA代码的Excel:
代码语言:javascript复制 0 Root Entry
1 Root EntryWorkbook
2 Root Entry_VBA_PROJECT_CUR
3 Root Entry_VBA_PROJECT_CURVBA
4 Root Entry_VBA_PROJECT_CURVBAThisWorkbook
5 Root Entry_VBA_PROJECT_CURVBASheet1
6 Root Entry_VBA_PROJECT_CURVBAMMain
7 Root Entry_VBA_PROJECT_CURVBAMString
8 Root Entry_VBA_PROJECT_CURVBAMCDLL
9 Root Entry_VBA_PROJECT_CURVBAMObject
10 Root Entry_VBA_PROJECT_CURVBA模块1
11 Root Entry_VBA_PROJECT_CURVBACAVLTree
12 Root Entry_VBA_PROJECT_CURVBACNode
13 Root Entry_VBA_PROJECT_CURVBAMTestTree
14 Root Entry_VBA_PROJECT_CURVBASheet2
15 Root Entry_VBA_PROJECT_CURVBA_VBA_PROJECT
16 Root Entry_VBA_PROJECT_CURVBAdir
17 Root Entry_VBA_PROJECT_CURPROJECTwm
18 Root Entry_VBA_PROJECT_CURPROJECT
19 Root Entry[5]SummaryInformation
20 Root Entry[5]DocumentSummaryInformation
21 Root Entry[1]CompObj
Workbook、[5]SummaryInformation、[5]DocumentSummaryInformation、[1]CompObj是Excel文件的信息,和VBA不相关。
除具体的模块信息差异之外,VBA相关的信息和07版本相比,多了一个_VBA_PROJECT_CUR路径。
所以,VBAProject就是一个在Excel文件中的数据流,这个数据流记录了VBA相关的信息。
获取VBAProject结构可以看VBA解析复合文档相关文章。
主要参考官方文档[MS-OVBA]: Office VBA File Format Structure:
https://docs.microsoft.com/en-us/openspecs/office_file_formats/ms-ovba/575462ba-bf67-4190-9fac-c275523c75fc