VBA标准模块序列化为JSON及对象引用获取方案问询
问题1:VBA-JSON是否支持序列化普通模块而非类模块?
不支持。VBA-JSON的ConvertToJson函数的入参仅支持类实例、字典、集合、数组等可枚举/可引用的对象类型,普通(标准)模块属于静态代码容器,没有可序列化的实例结构,无法直接作为参数传入该函数。
问题2:是否有方法可以为VBA普通模块创建对象引用?
没有可行方法。VBA的普通模块成员全部是静态存储的,运行时不存在对应的实例对象,VBA runtime没有暴露普通模块的引用句柄,无法获取到符合要求的对象引用。
可行替代方案(用于提取全局变量序列化)
- 手动映射到字典:你可以写一个辅助函数,将目标模块的所有全局变量逐个存入
Scripting.Dictionary对象,再将字典传入ConvertToJson完成序列化,示例代码如下:
' 放在你的全局变量所在模块即可 Function ExportGlobalsToJson() As String Dim dict As Object Set dict = CreateObject("Scripting.Dictionary") ' 按实际变量名逐个添加 dict.Add "输入参数1", g_inputParam1 dict.Add "输入参数2", g_inputParam2 dict.Add "输出结果1", g_outputResult1 dict.Add "缓存数组", g_cacheArr ' 此处省略其余全局变量的添加逻辑 ExportGlobalsToJson = ConvertToJson(dict) End Function
- 临时改造为类模块:如果全局变量数量较多,可将该普通模块临时转换为类模块,将所有全局变量修改为类的公共成员,创建类实例后即可直接传入
ConvertToJson序列化,拿到数据后再还原为普通模块即可。
内容的提问来源于stack exchange,提问作者Eric
相关产品推荐
相关产品推荐

