title: How to build a 'SuperDictionary' custom object / Excel-VBA
body: <p>As a heavy user of dictionaries in vba, I found useful to create a 'super-dictionary' class, that deals with lots of minor issue I don't wanna deal with the main code. Below is a draft of this 'super-dictionary' custom-object.</p>
  
  <p>Is this a good idea? Could this approach affect the performance of my dictionaries in some unforeseen way? (for example is my <code>Get Item</code> method expensive? - I use it a lot)</p>
  
  <p>tks in advance!</p>
  
  <pre><code>Public pDictionary As Object
  
  Private Sub Class_Initialize()
      Set pDictionary = CreateObject("Scripting.Dictionary")
  End Sub
  
  Private Sub Class_Terminate()
      If Not pDictionary Is Nothing Then Set pDictionary = Nothing
  End Sub
  
  Public Property Get GetItem(Key As Variant) As Variant:
      If VarType(pDictionary.Items()(1)) = vbObject Then
          Set GetItem = pDictionary(Key)
      Else
          GetItem = pDictionary(Key)
      End If
  End Property
  
  Public Property Get GetItems() As Variant:
      Dim tmpArray() As Variant, i As Integer
      If Not pDictionary.Count = 0 Then
          ReDim tmpArray(pDictionary.Count - 1)
          For i = 0 To pDictionary.Count - 1
              If VarType(pDictionary.Items()(i)) = vbObject Then Set tmpArray(i) =pDictionary.Items()(i)
              If Not VarType(pDictionary.Items()(i)) = vbObject Then tmpArray(i) =pDictionary.Items()(i)
          Next i
      Else
         ReDim tmpArray(0)
      End If
        GetItems = tmpArray
  End Property
  
  Public Property Get GetKeys() As Variant:
      GetKeys = pDictionary.Keys
  End Property
  
  Public Property Get Count() As Integer:
      Count = pDictionary.Count
  End Property
  
  Public Property Get Exists(Key As Variant) As Boolean:
      If IsNumeric(Key) Then Exists = pDictionary.Exists(CLng(Key))
      If Not IsNumeric(Key) Then Exists = pDictionary.Exists(Key)
  End Property
  
  Public Sub Add(Key As Variant, Item As Variant):
       If IsNumeric(Key) Then pDictionary.Add CLng(Key), Item
       If Not IsNumeric(Key) Then pDictionary.Add Key, Item
  End Sub
  
  Public Sub AddorSkip(Key As Variant, Item As Variant):
      If IsNumeric(Key) Then
          If Not pDictionary.Exists(CLng(Key)) Then pDictionary.Add CLng(Key), Item
      Else
          If Not pDictionary.Exists(Key) Then pDictionary.Add Key, Item
      End If
  End Sub
  
  Public Sub AddorError(Key As Variant, Item As Variant):
      If IsNumeric(Key) Then
          If Not pDictionary.Exists(CLng(Key)) Then
              pDictionary.Add CLng(Key), Item
          Else
              MsgBox ("Double entry in Dictionary: " &amp; Key &amp; " already exists."): End
          End If
      Else
          If Not pDictionary.Exists(Key) Then
              pDictionary.Add Key, Item
          Else
              MsgBox ("Double entry in Dictionary: " &amp; Key &amp; " already exists"): End
          End If
      End If
  End Sub
  
  Public Sub Remove(Key As Variant):
      If IsNumeric(Key) Then
          pDictionary.Remove (CLng(Key))
      Else
          pDictionary.Remove (Key)
      End If
  End Sub
  </code></pre>