数组在代码结束后保留值
Array keeping values after the end of the code
我想知道是否有办法在代码结束和 excel 文件关闭后将一些值存储在数组中。
我们的想法是拥有一个包含一些值的数组。当 运行 编辑代码时,我可能会或可能不会修改它的某些值,当我关闭文件时,我希望这个数组继续存在并保留它的值。
我的意思是,当我重新打开文件和 运行 代码时,所有其他变量都将被重新初始化(并且显然会再次获得默认值),但这个特殊数组仍然有它的所有值都已存储(因此我当然不会在该代码中重新声明它)。
避免此麻烦的一种方法是将数组中包含的所有值存储在工作表中,每当代码再次为 运行 时,将它们放回新数组中。
但是我想知道是否有一种方法可以不使用工作表来做到这一点。
如您所述,将信息存储在(隐藏的)sheet 中,或者使用 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
人们倾向于将作品sheet视为Excel的核心和灵魂,因此不愿意让"such a big effort"只存储一个数组。从 Excel 的角度来看, sheet 只不过是一个数组,在它为空时只占用几个字节的内存。我认为 VeryHidden 作品sheet 正是您所要求的,实际上与 Word 的文档变量非常相似。
作为替代方案,我建议使用内置属性之一(例如关键字或注释)来存储可以拆分为数组的字符串。这可能更符合您的喜好,但我认为它较差,因为用户可以编辑它,除非您可以利用它来发挥自己的优势。
从技术上和所有实际目的来看,VeryHidden 作品sheet正是您所要求的。你的抵制是基于心理,而不是理性——至少,我是这样说服自己的,我可以说,对我创作的作品数量 sheet 更加自由,这让我在没有明显成本的情况下获得了更多的自由。
我想知道是否有办法在代码结束和 excel 文件关闭后将一些值存储在数组中。
我们的想法是拥有一个包含一些值的数组。当 运行 编辑代码时,我可能会或可能不会修改它的某些值,当我关闭文件时,我希望这个数组继续存在并保留它的值。 我的意思是,当我重新打开文件和 运行 代码时,所有其他变量都将被重新初始化(并且显然会再次获得默认值),但这个特殊数组仍然有它的所有值都已存储(因此我当然不会在该代码中重新声明它)。
避免此麻烦的一种方法是将数组中包含的所有值存储在工作表中,每当代码再次为 运行 时,将它们放回新数组中。 但是我想知道是否有一种方法可以不使用工作表来做到这一点。
如您所述,将信息存储在(隐藏的)sheet 中,或者使用 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
人们倾向于将作品sheet视为Excel的核心和灵魂,因此不愿意让"such a big effort"只存储一个数组。从 Excel 的角度来看, sheet 只不过是一个数组,在它为空时只占用几个字节的内存。我认为 VeryHidden 作品sheet 正是您所要求的,实际上与 Word 的文档变量非常相似。
作为替代方案,我建议使用内置属性之一(例如关键字或注释)来存储可以拆分为数组的字符串。这可能更符合您的喜好,但我认为它较差,因为用户可以编辑它,除非您可以利用它来发挥自己的优势。
从技术上和所有实际目的来看,VeryHidden 作品sheet正是您所要求的。你的抵制是基于心理,而不是理性——至少,我是这样说服自己的,我可以说,对我创作的作品数量 sheet 更加自由,这让我在没有明显成本的情况下获得了更多的自由。