Última entrada de la serie de entradas del blog que empezó con el post Elementos seleccionados de un ListBox.
En este último post añadiremos las líneas de código que verifican punto por punto de la Serie de datos de nuestro gráfico, hasta encontrar las coincidencias con los elementos seleccionados, que como vimos en el anterior post, tenemos recogidos en nuestra matriz redimensionada.
A continuación del código de la entrada anterior ,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, quedando:
Finalizada la programación, estamos dispuestos a probarla. Si seleccionamos varios elementos desde el ListBox, y ejecutamos la macro presionando el CommandButton que hemos llamado 'Ejecutar', veremos la acción resultante en el gráfico, cambiando de color Azul(vbBlue) a Rojo(vbRed) los puntos correspondientes.
Podemos ver una imagen:
En este último post añadiremos las líneas de código que verifican punto por punto de la Serie de datos de nuestro gráfico, hasta encontrar las coincidencias con los elementos seleccionados, que como vimos en el anterior post, tenemos recogidos en nuestra matriz redimensionada.
A continuación del código de la entrada anterior ,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, quedando:
Private Sub CommandButton1_Click() Dim lItem As Long, seleccionados As Integer Dim MiMatriz() As Variant '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 'redefinimos la matriz con el número de items seleccionados ReDim MiMatriz(1 To seleccionados, 1) As Variant x = 1 'recorremos todos los elementos del Listbox For lItem = 0 To ListBox1.ListCount - 1 'en caso de que el elemento esté seleccionado 'lo añadimos a una matriz 'que luego emplearemos para comparar en el gráfico If ListBox1.Selected(lItem) = True Then 'añadimos el item a la matriz redimensionada MiMatriz(x, 1) = ListBox1.List(lItem) 'dejamos el Listbox sin selección ListBox1.Selected(lItem) = False x = x + 1 End If Next lItem '''''''''''''''''''''''''''''''''''''' 'Trabajamos ahora sobre el gráfico Dim grafico As ChartObject Dim iPoint As Long, nPoint As Long Dim s As Series 'Definimos y localizacmos el gráfico Set grafico = Sheets(1).ChartObjects(1) Set s = grafico.Chart.SeriesCollection(1) nPoint = s.Points.Count 'unificamos el color de toda la serie s.Interior.Color = vbBlue 'recorremos los elementos de la matriz For itm = LBound(MiMatriz) To UBound(MiMatriz) 'recorremos el eje X, 'revisando si el nombre de los clientes 'coincide con los seleccionados en el Listbox For iPoint = 1 To nPoint If s.XValues(iPoint) = MiMatriz(itm, 1) Then s.Points(iPoint).Interior.Color = vbRed Next iPoint Next itm End Sub
Finalizada la programación, estamos dispuestos a probarla. Si seleccionamos varios elementos desde el ListBox, y ejecutamos la macro presionando el CommandButton que hemos llamado 'Ejecutar', veremos la acción resultante en el gráfico, cambiando de color Azul(vbBlue) a Rojo(vbRed) los puntos correspondientes.
Podemos ver una imagen: