¿VBA tiene estructura de diccionario?

Resuelto asked hace 15 años • 11 respuestas

¿VBA tiene estructura de diccionario? ¿Te gusta la matriz clave<>valor?

 avatar May 27 '09 19:05
Aceptado

Sí.

Establezca una referencia al tiempo de ejecución de MS Scripting ('Microsoft Scripting Runtime'). Según el comentario de @regjo, vaya a Herramientas->Referencias y marque la casilla 'Microsoft Scripting Runtime'.

Ventana de referencias

Cree una instancia de diccionario usando el siguiente código:

Set dict = CreateObject("Scripting.Dictionary")

o

Dim dict As New Scripting.Dictionary 

Ejemplo de uso:

If Not dict.Exists(key) Then 
    dict.Add key, value
End If 

No olvides configurar el diccionario para Nothingcuando hayas terminado de usarlo.

Set dict = Nothing 
Mitch Wheat avatar May 27 '2009 12:05 Mitch Wheat

VBA tiene el objeto de colección:

    Dim c As Collection
    Set c = New Collection
    c.Add "Data1", "Key1"
    c.Add "Data2", "Key2"
    c.Add "Data3", "Key3"
    'Insert data via key into cell A1
    Range("A1").Value = c.Item("Key2")

El Collectionobjeto realiza búsquedas basadas en claves utilizando un hash, por lo que es rápido.


Puede utilizar una Contains()función para comprobar si una colección en particular contiene una clave:

Public Function Contains(col As Collection, key As Variant) As Boolean
    On Error Resume Next
    col(key) ' Just try it. If it fails, Err.Number will be nonzero.
    Contains = (Err.Number = 0)
    Err.Clear
End Function

Edición 24 de junio de 2015 : Contains()agradecimiento más breve a @TWiStErRob.

Edición del 25 de septiembre de 2015 : agregado Err.Clear()gracias a @scipilot.

Caleb Hattingh avatar Nov 29 '2011 04:11 Caleb Hattingh

VBA no tiene una implementación interna de un diccionario, pero desde VBA aún puede usar el objeto de diccionario de MS Scripting Runtime Library.

Dim d
Set d = CreateObject("Scripting.Dictionary")
d.Add "a", "aaa"
d.Add "b", "bbb"
d.Add "c", "ccc"

If d.Exists("c") Then
    MsgBox d("c")
End If
Jarmo avatar May 27 '2009 12:05 Jarmo