VBA解析VBAProject 05——提取模块代码
时间:2022-07-28
本文章向大家介绍VBA解析VBAProject 05——提取模块代码,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
通过前面的文章能够知道,每一个模块的代码,在VBAProject中也就是一个数据流,这个数据流经过了run length encoding的算法进行压缩。
前面介绍的是自己使用VBA代码来解压缩,其实也有现成的API RtlDecompressBuffer可以使用,具体用法可以网上找找。
所以,只要能找到模块的数据流,然后进行解压缩就可以还原模块的代码。模块的数据流也就是在复合文档中读取一个数据流,另外要注意的是,这样读取出来的模块数据流并不都是我们写的VBA代码,还需要结合解析dir流时候得到的模块信息进行截取,再进行解压缩:
'读取某个模块的代码
'ModuleName 模块的名称
'StrCode 返回模块的代码
'Return 返回出错信息
Function GetModuleCode(ModuleName As String, ByRef StrCode As String) As String
Dim ret As String
Dim b() As Byte
'读取原始的流
ret = cf.GetStream(PrePath & "VBA" & ModuleName, b)
If VBA.Len(ret) Then
GetModuleCode = ret
Exit Function
End If
'vba代码只是后面的一部分
Dim bCode() As Byte
Dim moduleIndex As Long
moduleIndex = GetModuleIndex(ModuleName)
If moduleIndex = -1 Then
GetModuleCode = "CVBAProject: 在ModuleInfo_中没有找到模块[" & ModuleName & "]"
Exit Function
End If
Dim i As Long, j As Long
'跳过前面不需要的部分
ReDim bCode(UBound(b) - ModuleInfo_(moduleIndex).Offset) As Byte
For i = ModuleInfo_(moduleIndex).Offset To UBound(b)
bCode(i - ModuleInfo_(moduleIndex).Offset) = b(i)
Next
''run length encoding解码dir流
Dim cr As CRLE
Set cr = New CRLE
ret = cr.UnCompress(bCode, bCode)
If VBA.Len(ret) Then
GetModuleCode = ret
Exit Function
End If
Set cr = Nothing
StrCode = VBA.StrConv(bCode, vbUnicode)
End Function
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Python贪吃蛇小游戏_完整源码免费分享
- GitHub修改昵称和用户名(图解详细教程)
- Python飞机大战小游戏_完整源码免费分享
- Linux求助命令
- Linux关机命令及步骤
- Java实现二叉树层次遍历:从上往下打印出二叉树的每个节点,同层节点从左至右打印。
- Django 用户认证系统使用总结
- 前端综合面试题(9道)
- 用SQL查询Oracle数据库名和实例名
- Hadoop历史服务器配置详细步骤
- MySQL常见关键字优先级
- Linux进程管理命令及状态详解
- sqoop把hive数据导入mysql出现中文乱码
- Flink实现WordCount(实操详细步骤)
- 在客户端创建要素图层 (FeatureLayer)