使用VBA保存状态并防止在Excel中重新启动状态

时间:2012-08-08 15:09:47

标签: excel-vba vba excel

当我的项目启动时,Workbook_Open事件初始化几个结构并实例化变量。在运行状态期间,用户可以更改这些变量和结构的值。

当用户关闭项目时,我想以某种方式保存这些变量的值(保存当前状态),这样用户可以重新打开项目并在关闭之前从上次保存的状态运行。

在此阶段,即使保存了Excel,当重新打开项目时,由于Workbook_Open事件,变量和结构也会重置。

更新

我调查过使用隐藏工作表并将值保存到单元格,但我不知道这对我的数据是否真的可行。

我想保存的数据是对象的字典。这些对象反过来可能包含其他对象是单值数据。如果我选择使用隐藏的工作表,我将不得不在单元格中保存每个单独的数据值,如果我想保留字典中项目的顺序,那么编写和读回将会很繁琐。

我想知道是否有办法将永久存储的数据导出到磁盘上,以及导回数据的方法?如果我的理解不足,请告诉我其他方法。

更新2

XML能为我提供可行的解决方案吗? What is the best strategy for writing my collections and objects to disk and reimporting them later?

2 个答案:

答案 0 :(得分:2)

你必须决定一个持久性策略..我在不同情况下使用了隐藏的工作簿,SQL连接,.ini文件,甚至是平面文本文件。然后在Workbook_Open中,您必须将最后保存的数据加载到所有变量/结构中。

答案 1 :(得分:2)

就像我在评论中提到的那样,您可以将变量存储在隐藏的工作表中。看这个例子。我将变量存储在Sheets(“Temp”)中。在代码

中更改适用

在ThisWorkbook中

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Sheets("Temp").Range("A1").Value = MyVariable
End Sub

Private Sub Workbook_Open()
    MyVariable = Sheets("Temp").Range("A1").Value
    MsgBox MyVariable
End Sub

在模块中

Public MyVariable As Long

'~~> Some operation that you do with the variable
Sub Sample()
    MyVariable = MyVariable + 1
End Sub

现在每次打开工作簿时,您的变量都将设置为最后一个值。