VBA解析VBAProject 00

2020-09-10 16:11:27 浏览数 (1)

什么是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

0 人点赞