domingo, 30 de diciembre de 2012

COLECCIONES

¿Qué es una colección?
Una colección es un objeto utilizado para agrupar y administrar objetos relacionados. Las colecciones son un buen método para hacer un seguimiento de los objetos que una aplicación puede necesitar crear o destruir dinámicamente.
Una colección se parece a una matriz, en el sentido que podemos acceder a sus elementos mediante un índice.
Ventajas de utilizar colecciones frente a las matrices:
  • Utilizan menos memoria.
  • El acceso a los elementos de la colección es mas flexibe.
  • Las colecciones tienen métodos para añadir nuevos elementos y eliminar otros.
  • El tamaño de la colección se ajusta automáticamente.
  • Pueden tener simultáneamente elementos de diferentes tipos.

La palabra clave New en la declaración de la variable produce un objeto Collection que se va a crear cuando el control pasa a la instrucción de declaración.

Dim loteria As New Collection

El objeto Collection tiene los siguientes métodos:
  • Add: Agrega un elemento a un objeto Collection de VBA.
  • Remove: Quita un elemento de un objeto Collection de VBA.

Y las siguientes propiedades:
  • Count: Devuelve un valor Integer que contiene el número de elementos en una colección.
  • Item: Devuelve un elemento concreto de un objeto Collection de VBA por posición o por clave.

El siguiente procedimiento creamos la colección lotería con cinco elementos (números  aleatorios de 0 a 9) que presentamos concatenados dentro de una variable string en un mensaje.


Sub loteriaNiño()

Dim loteria As New Collection
Dim numero As Integer, n As Integer
' Llenamos el objeto colección de números enteros aleatorios.
    For n = 1 To 5
        numero = Int(rnd * 9)
        loteria.Add numero
    Next n

' Recorremos el objeto de colección para presentar el numero.
Dim premio As String
    For n = 1 To loteria.Count
        premio = premio & loteria.Item(n)
    Next n

MsgBox "El numero premiado es... " & Chr(13) & premio

End Sub

domingo, 16 de diciembre de 2012

DATOS DUPLICADOS

En esta publicación vamos a explicar cómo podemos eliminar la fila donde nos encontramos dos datos iguales, es decir, tenemos por ejemplo en la columna "A" referencias de nuestros productos y en la columna "D" tenemos referencias del proveedor, se nos da el caso de que alguna de las referencias son coincidentes y las necesitamos eliminar.




Al mismo tiempo vamos a provechar y vamos a incluir la aplicación StatusBar para ver la evolución de nuestro procedimiento.




Option Explicit

Sub EliminarFilas()   
Dim Rango As Range, Fila As Long, ÚltimaFila As Long   
Application.ScreenUpdating = False

Range("A1").Select

ÚltimaFila = Range("A:A").End(xlDown).Row   
For Fila = 1 To ÚltimaFila

    Application.StatusBar = "Procesando fila " & Fila & " / " & ÚltimaFila

        If Range("A" & Fila).Value = Range("D" & Fila).Value Then

            If Rango Is Nothing = True Then

                Set Rango = Rows(Fila)

            Else

                Set Rango = Application.Union(Rango, Rows(Fila))

        End If

    End If

Next Fila

If Rango Is Nothing = False Then

    Rango.Select

    Selection.Delete

    Range(1, 1).Select

End If  
Application.StatusBar = "Proceso finalizado"

Application.ScreenUpdating = True
End Sub