数组在代码结束后保留​​值

时间:2017-08-31 08:56:39

标签: arrays vba excel-vba variables storage

我想知道在代码结束并关闭excel文件之后是否有办法将一些值保存在数组中。

这个想法是拥有一个包含一些值的数组。在运行代码时,我可能会也可能不会修改它的某些值,当我关闭文件时,我希望这个数组存活并保持其值。 我的意思是,当我重新打开文件并运行代码时,所有其他变量将被重新初始化(显然会再次获得默认值),但这个特殊数组仍将存储其所有值(所以我当然不会在那段代码中重新声明它。)

避免此问题的一种方法是将数组中包含的所有值存储在工作表中,每当代码再次运行时,将它们放回到新数组中。 但我想知道是否有办法在不使用工作表的情况下执行此操作。

2 个答案:

答案 0 :(得分:3)

人们倾向于将工作表视为Excel的核心和灵魂,因此,不愿意做出如此大的努力"只存储一个数组。从Excel的角度来看,工作表只不过是一个数组,在空的时候只占用几个字节的内存。我认为,一个VeryHidden工作表正是你所要求的,实际上与Word的文档变量非常相似。

作为替代方案,我可以建议使用其中一个内置属性(如关键字或注释)来存储可以拆分为数组的字符串。这可能更符合您的喜好,但我认为它较差,因为用户可以编辑它,除非您可以利用这些优势。

从技术上讲,出于所有实际目的,VeryHidden工作表正是您所要求的。你的抵抗是基于心理学的,而不是理性 - 至少,这就是我说服自己的方式,而且我可以说随着我创造的工作单数量更加自由,给了我更多的自由,没有明显的代价。

答案 1 :(得分:1)

如您所述,在(隐藏)工作表中存储信息,或使用Document Variables

来自文档:

Sub AddDocumentVariable() 
 ActiveDocument.Variables.Add Name:="Age", Value:=12 
End Sub

即使您的代码已完成或工作簿已关闭并再次打开,这些变量也可用。

编辑:(对于excel,代码找到here

Sub test()
Dim wb As Workbook
Dim docProps As DocumentProperties
Dim docProp As DocumentProperty
        Set wb = ActiveWorkbook
        Set docProps = wb.CustomDocumentProperties

     With docProps
             .Add Name:="CustomNumber", _
                        LinkToContent:=False, _
                        Type:=msoPropertyTypeNumber, _
                        Value:=1000
             .Add Name:="CustomString", _
                        LinkToContent:=False, _
                        Type:=msoPropertyTypeString, _
                        Value:="This is a custom property."
             .Add Name:="CustomDate", _
                        LinkToContent:=False, _
                        Type:=msoPropertyTypeDate, _
                        Value:=Date
     End With
        For Each docProp In docProps
             Debug.Print docProp.Name, docProp.Value
     Next

End Sub