miércoles, 22 de octubre de 2014

VBA: Un procedimiento Sub con parámetro.

Hoy veremos un uso bastante cómodo de los procedimientos Sub, que consiste en definir tantos parámetros como necesitemos.
En el ejemplo del día aprovecharemos la selección realizada sobre un ListBox para ejecutar un procedimiento Sub que trata la información aportada por ese ListBox.


Tenemos el siguiente cuadro de información de diferentes empresas de un grupo para ciertos años:

VBA: Un procedimiento Sub con parámetro.



la idea es construir un UserForm para desde él, seleccionar una de las empresas y que se resalten los datos correspondientes...

Construimos un simple UserForm con dos controles:
1- un ListBox1
2- un commandButton1 para Salir de él.

La carga de código de este formulario es:

Private Sub UserForm_Initialize()
'Cargamos el formulario con datos
UserForm1.ListBox1.RowSource = "A2:A10"
End Sub

Private Sub ListBox1_Click()
'asociamos el evento para al hacer click llamar a la macro
Call Módulo1.ResaltaDatos(ListBox1.Value)
End Sub

Private Sub CommandButton1_Click()
'descargamos el userForm1 para Salir
Unload UserForm1
End Sub



Este es el aspecto del userform al mostrarlo:

VBA: Un procedimiento Sub con parámetro.



La parte de programación interesante es la siguiente... que hemos insertado en un Módulo estándar:

Sub ResaltaDatos(empresa)
'comenzamos quitando el formato anterior
Range("B2:D10").Interior.Color = xlNone

'Buscamos la fila que corresponde a la empresa seleccionada
'con el ListBox
With Worksheets(1).Range("A1:A10")
    Set c = .Find(empresa, LookIn:=xlValues)
    If Not c Is Nothing Then
        firstAddress = c.Address
        Do
            fila = c.Row    'fila buscada
            Set c = .FindNext(c)
        Loop While Not c Is Nothing And c.Address <> firstAddress
    End If
End With

'aplicamos un formato de color de fondo
Range("B" & fila & ":D" & fila).Interior.Color = vbCyan

End Sub



Donde hemos definido un parámetro dentro del proceso Sub ResaltaDatos- 'empresa', que utilizamos como haríamos con cualquier variable.
La diferencia es que en este caso la cargamos de información desde el evento _click del Listbox, indicando que el valor de esta variable será el elegido del desplegable del ListBox1:
Call Módulo1.ResaltaDatos(ListBox1.Value)


El efecto es claramente el buscado, al seleccionar las diferentes empresas, se van resaltando...

VBA: Un procedimiento Sub con parámetro.

No hay comentarios:

Publicar un comentario en la entrada