|
Hola. Como no he encontrado por la red información clara y concisa de como usar los diccionarios, dejo aquí unos pedacitos de código para los que quieran empezar a usarlos. Toda la información que he visto around the world  solo mostraba el uso de los métodos en el mismo sub que creaba el diccionario, en fin que aquí está el resultado de unas cuantas horas de búsqueda y muchos ensayos prueba/error para que algún otro aprendiz como yo no tenga que perder un día y medio para empezar a trastear con los diccionarios,
Solo recordad que en herramientas/referencias debe incluirse la librería "microsoft vbscript regular expressions 5.5"
Gracias a todos los responsables del foro por esta maravillosa herramienta, sin ella muchos de nosotros aprenderíamos con más trompicones.
Por pura casualidad hoy es mi (64) cumpleaños, no esperéis tanto como yo para aportar al foro  .
Saludos
'****************** Pegadlo en un módulo ******************************
Option Compare Database Option Explicit
'Delararlo en la cabecera del módulo no sé si será lo ortodoxo pero para mí ha sido "mano de santo" Public Dict As Object
' Sub AddDict() 'Crea el diccionario Set Dict = CreateObject("Scripting.Dictionary")
Dim i As Variant
'Crea 5 claves como: "MiClave1" , valor 1 For i = 1 To 5
Dict.Add "MiClave" & i, i
Next i
End Sub
Sub testDict()
'Para recorrerlo************************** Dim clave As Variant For Each clave In Dict.Keys Debug.Print clave & " - " & Dict.Item(clave) 'MsgBox "Dict - " & clave & " - " & Dict.Item(clave) Next clave '***************************************** End Sub
Sub ClaveTest() 'Comprobar si existe una clave Dim Key As Variant
If Dict.Exists("MiClave1") Then
Debug.Print "SI" Else Debug.Print "NO" End If
For Each Key In Dict.Keys Debug.Print Key, Dict(Key) Next
End Sub
Sub CambiaValor()
Dim clave As Variant 'Comprueba si existe el diccionario If Dict Is Nothing Then
'MsgBox "No existe." Debug.Print "No existe" Exit Sub End If Dict("MiClave3") = 0
For Each clave In Dict.Keys Debug.Print clave, Dict.Item(clave) 'MsgBox "Adddict - " & clave & " - " & dict.Item(clave) Next clave
''***************************************** End Sub
Sub Reordena() 'Un pequeño ejercicio para reasignar valores y dejar las de valor cero al final
Dim clave As Variant Dim claveSig As Variant Dim valor As Variant Dim valorSig As Variant Dim prefijo As String prefijo = "MiClave" Dim i As Byte
If Dict Is Nothing Then
Debug.Print "No existe el diccionario." Exit Sub End If
i = 1
For Each clave In Dict.Keys
'Constuyo la clave siguiente claveSig = prefijo & i + 1 'Recojo el valor de la siguiente clave valorSig = Dict.Item(claveSig) 'Si el valor es cero valor = Dict(clave) If valor = 0 Then 'Cambio el valor Dict(clave) = valorSig
'Cambio el valor de la siguiente clave Dict(claveSig) = 0 End If 'En la penúltima salgo, la última ya será = 0 If clave = "MiClave4" Then Exit For i = i + 1 Next clave
For Each clave In Dict.Keys
Debug.Print clave, Dict.Item(clave) 'MsgBox "Dict - " & clave & " - " & Dict.Item(clave) Next clave
End Sub
|