sábado, julio 15, 2006

Controles ActiveX en hojas de calculo Excel

Como ya hemos visto en una entrada anterior, Excel permite agregar controles en las hojas de cálculos. En las versiones más recientes de Excel existen dos tipos de controles: controles Excel y controles ActiveX.
En las entradas anteriores hablamos sólo sobre los controles Excel, que aparecen en la barra Formularios. Estos controles son menos flexibles y tienen menos posibilidades que los controles ActiveX, pero por lo general su funcionalidad es suficiente para cualquier usuario Excel promedio.
Sobre las diferencias entre los controles de la barra Formularios y los controles ActiveX en Excel, pueden leer el resumen de John Walkenbach (en inglés).

Los controles ActiveX son mucho más flexibles y ofrecen muchas más posibilidades, pero por lo general, requieren el uso de Vba.
Para usar los controles ActiveX en la hoja de cálculo tenemos que activar la barra Cuadro de Controles (clic en la zona de barras de herramientas y selección o Ver---Barra de Herramientas---Cuadro de Controles)



En la parte superior de la barra aparecen tres iconos: modo de diseño, propiedades y ver código.

Estos tres iconos nos permiten cambiar el aspecto y las propiedades del control y también agregarle funcionalidad con Vba (macros). Estas tareas se realizan estando en "modo de diseño". Una vez terminada la adaptación del control a nuestras necesidades, debemos pulsar el icono para salir del modo de diseño y poder utilizar el control.
Para insertar un control ActiveX procedemos como con los controles Excel, cliqueando con el mouse el control y ubicándolo en la hoja de cálculo.
Una de las diferencias con los controles Excel, es que los controles ActiveX tienen muchas más propiedades que pueden ser adaptadas. Para acceder al menú de las propiedades activamos el control y cliqueamos el icono de propiedades en la barra de Cuadro de Controles.
Por ejemplo, insertamos una casilla de verificación y abrimos el menú de propiedades

Como podemos ver, existen un gran número de propiedades, como el color, la fuente y otras. La propiedad "LinkedCell" nos permite ligar el "estado" del control a una celda en la hoja. Esta celda puede ser utilizada luego como argumento en una función. Por ejemplo, he cambiado el texto de la casilla a prueba de "prueba de casilla", el color del fondo y la he ligado a la celda C1. Al final del proceso apretamos el icono "modo de diseño" para activar el control. A partir de ahora, de acuerdo a la situación de la casilla, en la celda C1 aparecerá el valor VERDADERO (casilla señalada) o FALSO.




Como ya hemos dicho, podemos utilizar el valor de la celda C1 como argumento en una función. Por ejemplo, en la celda A4 podemos escribir esta fórmula
=SI(C1;"casilla señalada";"casilla sin señalar")
y de acuerdo a la situación del control, aparecerá uno de los dos textos.


En la esquina inferior derecha de la barra del Cuadro de Controles, está el icono "más controles". Al activarlo tendremos acceso a muchos más controles (no todos disponibles para las hojas de cálculos).

En la próxima entrada veremos como insertar un calendario permanente en una hoja de cálculo de Excel.



Categorías: Varios_

Technorati Tags:

miércoles, julio 12, 2006

Gráficos en Excel – Actualización automática de datos.

Supongamos un gráfico basado en una tabla de datos como esta:




Excel nos permite generar con facilidad un gráfico que represente el desarrollo de las ventas:




Ahora supongamos que queremos que el gráfico se actualice cada vez que agregamos datos a nuestra tabla.
Una posibilidad es hacerlo manualmente, para lo cual tendremos que activar el gráfico y en el menú Gráfico---Datos de origen y actualizar al rango de los datos



Pero existe la posibilidad de forzar a Excel a actualizar el gráfico en forma automática cada vez que agreguemos datos a nuestra tabla.
Para lograr esto definimos nombres que contienen fórmulas con la función DESREF para crear rangos automáticos, como ya vimos en la entrada sobre referencias dinámicas.
Para crear un gráfico que se actualice automáticamente seguimos estos pasos:
1 – creamos un nombre llamado Mes (Insertar---Nombres---Definir) con esta fórmula: =DESREF(Hoja1!$A$2,0,0,CONTARA(Hoja1!$A:$A)-1,1)
2 – creamos un segundo nombre que contendrá esta fórmula: =DESREF(Hoja1!$B$2,0,0,CONTARA(Hoja1!$B:$B)-1,1)
3 – Contrariamente a lo que parecería lógico, no aplicamos el nombre con el rango dinámico en lugar de el rango definido en la ventana Rango de Datos (ver arriba), sino en una fórmula que define el gráfico, llamada SERIES. Activamos el gráfico y seleccionamos una de las barras. Al hacer esto veremos la fórmula "SERIES" en la barra de fórmulas



En esta fórmula reemplazamos las referencias a los rangos por los nombres que acabamos de definir:

=SERIES(Hoja1!$B$1,grafico_aut_sp.xls!mes,grafico_aut_sp.xls!ventas,1)

Como se puede ver, Excel agrega automáticamente el nombre del cuaderno donde están definidos los nombres.

A partir de este momento, el gráfico se actualizará automáticamente cada vez que agreguemos los datos de un mes de ventas.

Y antes de finalizar la entrada, unas palabras sobre la fórmula SERIES. Esta fórmula es distinta de las que conocemos en Excel. No podemos utilizarla en celdas de una hoja y tampoco podemos combinar en ella funciones que usamos en las hojas de cálculo. La tarea de esta fórmula es definir los datos que se utilizan en un gráfico. Su sintaxis es la siguiente:
=SERIES(título, rango de la categoría, valores, orden)

Como hemos dicho, no podemos usar funciones regulares de Excel en esta fórmula, pero como hemos visto, si podemos usar nombres que contienen fórmulas comunes.


Categorías: Graficos_

Technorati Tags:

miércoles, julio 05, 2006

Excel - Controlando el orden de entrada de datos en una hoja

En una entrada anterior mostré como limitar el área de trabajo en una hoja de Excel. Para hacer esto usamos la propiedad Scroll Area de la hoja, como explico en esa entrada.
Pero ahora uno de mis lectores me pregunta como controlar la secuencia de entrada de datos en una hoja de Excel. Esta situación se da en especial en formularios, donde queremos facilitar la entrada de datos. Por ejemplo, que cada vez que apretamos "enter" Excel sepa elegir la celda adecuada en la secuencia.
Esto se puede hacer con macros especiales llamadas "eventos". Estas macros están ligadas a una hoja específica y entran en acción cuando sucede algún evento determinado, por ejemplo, cambia el valor de una celda o elegimos una celda en una rango determinado. De ahí su nombre.
Daré aquí un ejemplo sencillo. Un formulario para recuento de inventario donde en la columna A se introduce el número de catálogo, en la columna B la cantidad, en la columna C el precio y el la columna D calculamos el valor total (cantidad X precio).




Con la ayuda de una macro del tipo eventos, queremos que después que el usuario ingrese el número de catálogo y apriete "enter", Excel pase automáticamente a la celda de la columna B de la misma fila (cantidad); después de ingresar la cantidad Excel pase directamente a la celda del precio y calcule automáticamente el total en la columna D.

Los pasos a seguir son los siguientes:

1 – apuntamos con el mouse a la pestaña de la hoja y pulsamos el botón derecho; en el diálogo que se abre seleccionamos "ver código"




2 – en el editor del Vba (prestar atención que la Hoja1 aparece seleccionada) copiamos este código

Private Sub Worksheet_Change(ByVal Target As Range)

Dim rngA As Range, rngB As Range, rngC As Range

Set rngA = [A:A]
Set rngB = [B:B]
Set rngC = [C:C]

If Union(Target, rngA).Address = rngA.Address Then _
Target.Offset(0, 1).Select

If Union(Target, rngB).Address = rngB.Address Then _
Target.Offset(0, 1).Select

If Union(Target, rngC).Address = rngC.Address Then
Target.Offset(0, 1).Value = Target * Target.Offset(0, -1)
Target.Offset(1, -2).Select
End If
End Sub




3 – A partir de este momento cuando se produce un cambio en la hoja, la macro evalúa si el cambio ocurrió en alguno de los rangos definidos (rngA, rngB, rngC). De ser así procede de acuerdo al código.


Esta macro supone que los datos son introducidos siguiendo el orden establecido (número de catálogo, cantidad, precio). Si variamos el orden, el total calculado (columna D) puede ser incorrecto.


Categorías:Varios_

Technorati Tags: ,