Ya hemos visto en videos anteriores, como en el VIDEO N° 13, la posibilidad de mantener en la hoja controles de modo flotante. Es decir, que se irán moviendo a medida que avanzamos en las filas de una hoja.
Por ejemplo, si tenemos una tabla y deseamos ver el acumulado a medida que registramos filas, tendríamos un control dibujado desde la ficha Programador/Desarrollador, donde mostraremos la suma de los registros hasta ese momento. Esto será de utilidad considerando que las Tablas permiten agregar una fila de Totales pero al final de la misma.
La macro que utilizaremos se colocará en el Editor, en el objeto Hoja donde se encuentre la tabla. El evento a controlar será Worksheet_Change, o sea al cambio en la hoja.
Private Sub Worksheet_Change(ByVal Target As Range)
'controlar que la celda modificada se encuentre en col B a partir de fila 3
If Target.Column <> 2 Or Target.Row < 3 Or Target.Count > 1 Then Exit Sub
' se muestra en el label el total que se va
acumulando
totx =
Application.WorksheetFunction.Sum(Range("C3:C" & Target.Row))
Label1.Caption = Format(totx, "#,000.00")
'se ubica el control en la línea de la celda
ActiveSheet.Label1.Top = Range("B" & Target.Row).Top
End Sub
Hoy vamos a ver que también podemos utilizar 'OBJETOS' de modo 'flotante'. Pueden ser imágenes, formas o ICONOS, que es la última novedad en las nuevas versiones Excel.
En el siguiente ejemplo, necesitamos mostrar diferentes iconos, según el valor ingresado en la col F con respecto a un valor de referencia que se encuentra en celda I2.
Primero insertaremos 3 objetos desde menú Insertar, Ilustraciones, Iconos.
Estos objetos se llamarán 'Gráfico' más un índice y se activará un nuevo menú: Formato de gráfico. Podemos trabajarlos individualmente asignándole tamaño y color.
También podemos 'Convertir a forma' el objeto seleccionado, activándose en ese caso el menú Formato de formas. Y trabajarlo por partes (modificar o quitar partes, con colores diferentes o no, etc).
Una vez terminada la tarea de formatear los objetos, tomaremos nota de sus nombres para ajustarlos en la siguiente macro. Como también se trata de controlar la modificación de una celda se colocará en el Editor, objeto Hoja donde se esté trabajando.
'declaración de una matriz que será utilizada en varios procesos.
Dim grafico()
Private Sub Worksheet_Activate()
'cada vez que se activa la hoja se muestran todos los iconos en fila 1 de un rango auxiliar.
grafico = Array("Graphic 5", "Group
15", "Graphic 4")
For i = 0 To 2
With
ActiveSheet.Shapes.Range(Array(grafico(i)))
.Visible = True
'se
pueden ubicar todos encima de la celda L1
'.Top = [L1]: .Left [L1]
'o se
colocan a 12 columnas más allá del índice i, lo que resultará en col L, M y N
.Top =
Cells(1, i + 12).Top: .Left = Cells(1, i + 12).Left
End With
Next i
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
'se controla el cambio en la col F a partir de fila 3
If Target.Column <> 6 Or Target.Row < 3 Then
Exit Sub
'se guarda en una variable el resultado de comparar
el valor ingresado con respecto al valor de referencia.
If Target.Value < [I2] Then x = 0
If Target.Value = [I2] Then x = 1
If Target.Value > [I2] Then x = 2
'llamada a una subrutina que será común a los 3
casos, indicando el nro de gráfico a mostrar y la celda donde ubicarlo.
Call mueveGraf(x, Target.Row)
End Sub
Sub mueveGraf(x, filx)
'recorre
la colección de objetos de la hoja mostrando u ocultando según el valor de
x
For i = 0 To 2
If i = x
Then
'si se trata del objeto que corresponde, se lo
muestra
With
ActiveSheet.Shapes.Range(Array(grafico(i)))
.Visible = True
'y se
lo coloca haciendo coincidir el tope y margen izquierdo con la celda que ha sido
modificada.
.Top = Cells(filx, 8).Top: .Left = Cells(filx, 8).Left
End
With
Else
'si no
se trata del objeto correspondiente, se lo oculta
ActiveSheet.Shapes.Range(Array(grafico(i))).Visible = False
End If
Next i
End Sub
Descargar libro de ejemplo desde aquí.
Acceso al VIDEO N° 58 desde aquí.
No hay comentarios.:
Publicar un comentario