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: Vba, Eventos en Excel