如何在VBA中准备Collection对象

下面的代码是在VB.net,我怎么能做同样的事情与VBA

Option Strict On Imports System.Collections Public Class Collect Public Shared Sub Main() Dim sta As New Collection sta.Add("New York", "NY") sta.Add("Michigan", "MI") sta.Add("New Jersey", "NJ") sta.Add("Massachusetts", "MA") End Sub End Class 

在准备vba集合对象之后,我想通过键检索它,假设我想为键“纽约”的值。 它应该返回纽约。

你不能在VBA集合中做这个( 更新:按照你在vb.net中的布局顺序,我注意到Jean已经重新排列了你的论点来满足你的需要 ),你可以用字典,见下文

词典比集合更高效,function也更多,所以我build议这样做

  1. 有用的阅读:Patrick Matthews在VBA中使用Dictionary类(以及Collections和Dictionaries的不同之处) http://www.experts-exchange.com/A_3391.html

     Public Sub Main() Dim sta Set sta = CreateObject("scripting.dictionary") sta.Add "New York", "NY" sta.Add "Michigan", "MI" sta.Add "New Jersey", "NJ" sta.Add "Massachusetts", "MA" MsgBox sta("New York") End Sub 

以下是如何将项目添加到Collection对象并通过键检索它们的方法:

 Dim sta As Collection Set sta = New Collection 'syntax is: sta.Add myItem, [myKey] sta.Add "NY", "New York" sta.Add "MI", "Michigan" sta.Add "NJ", "New Jersey" sta.Add "MA", "Massachusetts" MsgBox sta.Item("New York") ' Returns "NY" 

正如你所看到的,参数顺序与.NET中的相反。 为了避免混淆,你可以使用命名参数,例如

 sta.Add Item:="NY", Key:="New York" 

例如,OtherWise是创build一个你的types

 Public Type City Name As String Acron As String End Type Sub FillType() Dim x(3) As City Dim y As Variant x(0).Name = "NewYork" x(0).Acron = "NY" x(1).Name = "Michigan":x(1).Acron = "MI" x(2).Name = "New Jersey":x(2).Acron = "NJ" x(3).Name = "Massachusetts":x(3).Acron = "MA" For i = LBound(x) To UBound(x) Debug.Print x(i).Name, x(i).Acron Next i End Sub 

[]的