jueves, 19 de julio de 2012

VBA: Contar elementos seleccionados de un ListBox en Excel.

Empezaré hoy una serie de algunos post donde explicar cómo conseguir formatear la serie de un gráfico a partir de ciertos elementos seleccionados de un ListBox (ActiveX). Se trata pués de insertar en primer lugar un Cuadro de Lista (ListBox) de los controles ActiveX, configurándolo para que podamos realizar una selección múltiple de varios elementos.
Inicialmente aprenderemos la forma de saber cuántos elementos hemos seleccionado de este ListBox que alimentaremos con la propiedad ListfillRange con unas celdas de nuestra hoja de cálculo de Excel. Como no existe ninguna propiedad para este Control ListBox, que permita averigüar el número de elementos marcados, tendremos que generar un contador que evalúe si cada elemento del LisBox ,ncuentra o no seleccionados, lo que conseguiremos con un Loop que recorra éstos. Estos cálculos se deberán ejecutar con un CommandButton.

Empecemos entonces viendo cuál es el origen de nuestros datos:


A continuación insertaremos desde Ficha Programador > Controles > Insertar > Controles ActiveX > Cuadro de Lista, al que cambiaremos las propiedades:
ListFillRange: A2:A11
Multiselect: 1-fmMultiSelectMulti


Tenemos ya un ListBox con elementos los valores del rango A2:A11, y con la propiedad de poder seleccionar al tiempo varios de ellos.

El siguiente paso es insertar un Botón de comando (ActiveX) - CommandButton, ya que es a este botón al que vamos a agregar la programación que nos permitirá contar, de momento, el número de elementos seleccionados.
Insertaremos en la Hoja1 (en la hoja donde se encuentre nuestro ListBox) del Explorador de proyectos del Editor de VBA el siguiente código, formando nuestra macro de Excel, con un evento click:

Private Sub CommandButton1_Click()
Dim seleccionados As Integer

'recorremos cada elemento del ListBox
For i = 0 To ListBox1.ListCount - 1
    'verificamos si está o no seleccionado
    'en caso afirmativo, acumulamos el contador
    If ListBox1.Selected(i) = True Then
        seleccionados = seleccionados + 1
    End If
Next i
'comprobamos que hay algún elemento seleccionado
If seleccionados = 0 Then
    MsgBox "Debes marcar al menos un cliente"
    Exit Sub
End If

MsgBox "Número de elementos seleccionados: " & seleccionados

End Sub


Al seleccionar algunos elementos del ListBox, y presionar el CommandButton, aparece el cuadro de mensaje (MsgBox) indicando cuántos elemenos se han seleccionado.


Con lo que concluímos la primera parte; fundamental conocer cuál es este valor, ya que posteriormente lo emplearemos para redimensionar nuestra Matriz-Array, que estará compuesta exclusivamente por los elementos seleccionados... pero esto en el siguiente post.

6 comentarios:

  1. al llegar al cuadro de mensaje donde me indica el numero de filas seleccionadas me marca 1

    ResponderEliminar
    Respuestas
    1. Hola como estás?,
      un gusto saludarte.

      ¿cuántos 'clientes' tienes marcados?

      Saludos

      Eliminar
  2. Hola saludos y gracias por este ejemplo y me gustaria saber como hacer lo mismo pero que me sume la cantidades seleccionadas por ejemplo si seleccionara el campo importe. Gracias

    ResponderEliminar
  3. Excelente aporte tantos que busque y puse en práctica pero el suyo fue el mejor lo felicito gracias por su ayuda

    ResponderEliminar

Nota: solo los miembros de este blog pueden publicar comentarios.