是否有可能在Excel中永久存储VBA中的元素?
我在使用dynamic数组的Excel中编写macros。 用户将添加元素到该数组。
是否可以永久存储元素,所以即使在工作簿closures后元素也可以使用?
诀窍是我不想在工作表中存储元素,并在工作簿打开时将其插回到数组中,而是将元素永久保存在数组中。
您最好的select之一是将数组值存储在工作表中,并使用VBA将工作表标记为隐藏。
Me.Worksheets("ArrayValuesWorksheet").Visible = False
如果您使用本地CSV文件,registry等其他东西,那么只需将工作簿移动到不同的机器上,代码的行为就会不同,您将失去具有多个arrays副本的能力。
编辑 (在下面的@ Reafidy的评论中的极好的build议)
您还可以将数组存储在名称集合的名称中,并且可以隐藏该名称。
Names.Add Name:="StoredArray", RefersTo:=myArray, Visible:=False
直接回答你的问题:不,没有办法在内存中存储具有超出应用程序生命周期的数组 – 你必须将它保存在某个地方。
有几个选项可用,但最好的是最有可能将其保存到表单。 '非常隐藏'表只能通过VBA代码才能看到,所以对于用户来说,它和数组总是在那里并且在内存中处于活动状态是一样的。
要读取/写入表格中的数组,您可以使用
Sub WriteArray() Dim MyArray As Variant MyArray = Array("x", "y", "z") Range("A1:C1").Value = MyArray End Sub Sub ReadArray() Dim MyArray As Variant MyArray = Range("A1:C1").Value End Sub
之后,您可以使用工作表的Visible
属性来隐藏我们已经回复的内容。
“没有办法…”,>>>可以!
一些例子:listbox / ComboListBox(在一张纸上)=数组…
对于2D变体数组:range()= array。
或者把它存储在一个commandbarMenu中(那些可以做成多维的)
或whateverthat保持后重新加载工作簿…