VBA中的单个数据字典

我看起来像一个简单的问题。 我有一个值,我需要循环和删除的数组。 问题是一个数组只能被redimmed(不能删除中间的元素)。

我正在考虑使用字典,但我不会真正使用价值,只有关键,这似乎是一个浪费… 是否有这样的事情作为一个“关键”列表?

对于上下文,我想要做的是这样的:

  1. 创build数组: {1,2,3,4,5,6,7}

  2. 从中间删除一个元素:例如delete(3)= {1,2,4,5,6,7}

正如我所说,我可以使用字典,但似乎是一种浪费!

我几乎没有把价值观放在字典里。 我只是用钥匙。 别担心。 没有数据使用内存。

这些是你的select。

从.NET (尝试避免这些,因为已经有COM开销 – .NET的开销,只是复制COMfunction)

ArrayList – 一个没有固定大小的数组类。 你可以继续添加项目。

散列表 – 这个类与Scripting.Dictionary类相似。 您可以添加项目并按键查找它们。

队列 – 这是一个先进先出(FIFO)集合。 你推入项目,然后在相同的顺序读出来。

堆栈 – 先入先出(FILO)集合。 您将物品推入堆叠,然后以相反的顺序将其popup。

SortedList类似于Hashtable,除了迭代项目时,它们总是按键sorting。

请参阅https://msdn.microsoft.com/en-us/library/aa719110(v=vs.71).aspx

COM对象

你有VBScript的Scripting.Runtime的字典 (VBScript可以粘贴到VBA中)

 'This dedups Set Dict = CreateObject("Scripting.Dictionary") On Error Resume Next Dict.Add "Key1", "Data" Dict.Add "Key2", "Data" Dict.Add "Key3", "Data" If Err.Number <> 0 then If LCase(Arg(1)) = "l" then Dict.Remove Line Dict.Add Line, "" End If End If For Each thing in Dict.Keys() Msgbox thing Next 

然后是ADOlogging集 ,可以从文件保存和加载。

 'This sorts and filters Set rs = CreateObject("ADODB.Recordset") With rs .Fields.Append "SortKey", 4 .Fields.Append "Txt", 201, 5000 .Open .AddNew .Fields("SortKey").value = 1 .Fields("Txt").value = "Line1" .UpDate .AddNew .Fields("SortKey").value = 2 .Fields("Txt").value = "Line2" .UpDate .AddNew .Fields("SortKey").value = 3 .Fields("Txt").value = "Line3" .UpDate 'Sorting .Sort = "SortKey ASC" 'Filtering .filter = "Sortkey < 3" 'Writing it out Do While not .EOF MsgBox .Fields("Txt").Value .MoveNext Loop 

使用ArrayList

 Set myAl = CreateObject("System.Collections.ArrayList") myAl.Add ("The") 'Add Item myAl.Add ("dog") 'Add Item myAl.Remove ("dog") 'Remove an item 'An example of how to traverse the items of an ArrayList: For Each Item In myAl Debug.Print Item Next Item 

你也可以使用Dictionary ,我不希望会有很多开销,但ArrayList数据结构可能是你正在寻找的。

还有其他的数据结构,如哈希表,堆栈,队列,但他们似乎不太适合您的需要。