1

可能重复:
将所有 excel 插件模块导出到 .bas 文件的最快方法是什么?

是否可以在 VBA Excel 中对所有使用的模块和数据结构进行快照并在一段时间后恢复它?

原因是崩溃后重现错误

添加。是的,本质上我想序列化类和类型。

4

2 回答 2

3

我觉得你想要的是将所有类序列化为 XML 文件?我知道这个函数存在于其他语言中,但 VBA 可能没有它。(我相信你可以强迫一些东西)——布拉德

@Brad,是的,确切地说,作为一种可能的方式——nikaan

假设 VBA 不存在此方法(尽管它可用于 VB.NET 或 VB 2005: http: //support.microsoft.com/kb/315703),我可能会尝试进行模拟:编写状态使用 FSO 将每个对象/变量(所需的)复制到一个 txt 文件中。
不过,我不知道这对您的项目是否可行,而且我可能不喜欢为大量代码而高兴地这样做。

dim sFile               As string 
Dim FSO                 As FileSystemObject     
Dim FSOFile             As TextStream 


sFile = "U:/Log.txt"

Set FSO = New FileSystemObject
Set FSOFile = FSO.OpenTextFile(sFile, 2, True) 
FSOFile.writeline (<Descriptions+Property/variable value>) 
FSOFile.Close
set FSO = nothing 

根据您输入描述的程度(例如,包括用于成功实例化对象的布尔值等......),您可能能够看到屏幕后面发生的事情,直到您的应用程序崩溃......我不知道不知道这是否回答了您的问题,因为我有点怀疑您所指的“字段”(评论)。

于 2012-07-26T15:00:07.697 回答
1

作为 VBA 项目的所有者,您可以创建一个子例程来导出当前项目中的所有模块。此链接提供代码:

http://edndoc.esri.com/arcobjects/9.0/Samples/Application_Framework/ExportVBACode.htm

出于您描述的目的,我认为没有理由这样做。
就个人而言,我会使用像这样的蹩脚技巧:

选项显式

Sub Save_File()

Dim sCur_Path           As String
Dim sCopied_Path        As String

Application.DisplayAlerts = False
Application.ScreenUpdating = False


sCur_Path = ThisWorkbook.FullName
sCopied_Path = "U:/Copied_New.xlsm"

ThisWorkbook.SaveAs sCopied_Path
ThisWorkbook.SaveAs sCur_Path

End Sub
于 2012-07-26T12:32:05.240 回答