【问题标题】:Snapshot of data structures, VBA excel [duplicate]数据结构的快照,VBA excel [重复]
【发布时间】:2012-07-24 23:22:52
【问题描述】:

可能重复:
What's the fastest way to export all excel add-in modules to .bas files?

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

原因是崩溃后重现错误

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

【问题讨论】:

  • 您要导出模块以便稍后导入并查看它们吗?
  • 寻求一个简单的解决方案怎么样:创建一个执行另存为的按钮?点击保存按钮保存,点击自己创建的导出按钮创建备份。
  • 您是否想在发生错误后捕获程序的状态?喜欢调用堆栈?
  • @JimmyPena:是的,完全正确。例如,我想将它们导出到文件..
  • @Kim Gysen:我有很多字段的非常丰富的结构,我不想单独保存每个字段 - 我只想保存当前的数据状态

标签: vba serialization excel error-handling snapshot


【解决方案1】:

我觉得你想要的是将所有类序列化为 它们是 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 

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

【讨论】:

    【解决方案2】:

    作为 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
    

    【讨论】:

    • 谢谢!但是这个例程只复制模块的表格和文本,而不是每个字段的当前状态和值..
    • 我确定你知道 codeproject.com/KB/office/SourceTools.aspx 它做了类似的事情,但这不是我想要的
    • @nikaan 明白了,我一开始没听懂。
    猜你喜欢
    • 1970-01-01
    • 2013-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-01
    • 1970-01-01
    • 2015-09-07
    • 1970-01-01
    相关资源
    最近更新 更多