是否有可能在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保持后重新加载工作簿…