
Macro para detectar cambios en varias celdas a la vez
Publicado por Juan (4 intervenciones) el 02/08/2021 06:52:05
He creado una macro que detecta cambios de valores en un rango de celdas y le cambia el color de fondo a la celda cambiada y 6 celdas a su izquierda, de color verde si se ingresa una fecha de egreso y de color blanco si se borra una fecha existente.
En mi proyecto de una base de datos de empleados, si se pone una fecha de egreso en la columna G (rango G5:G495) o se elimina una existente, se producen los cambios.
La macro funciona bien pero tiene algunas limitaciones que deseo resolver:
1) Al ingresar la fecha de egreso hay que pulsar la tecla enter o la flecha del teclado abajo, porque si se lo hace de otra manera (ejemplo la tecla tabulador) el rango de celdas a pintar no se respeta ya que el código toma la celda activa para efectuar los cambios.
2) El código funciona si los cambios se hacen de a una celda a la vez, si selecciono un rango de celdas para cambiar sus valores simultáneamente da error ("No coinciden los tipos".
¿Es posible solucionar estás 2 limitaciones o al menos la 2da.?
CODIGO:
CAPTURA DE PANTALLA CAMBIANDO VALOR A UNA CELDA: :)

ERROR SI INTENTO CAMBIAR VARIAS CELDAS A LA VEZ: :(

Adjunto archivo de Excel Microsoft 365
Muchas gracias por la ayuda que me puedan brindar.
En mi proyecto de una base de datos de empleados, si se pone una fecha de egreso en la columna G (rango G5:G495) o se elimina una existente, se producen los cambios.
La macro funciona bien pero tiene algunas limitaciones que deseo resolver:
1) Al ingresar la fecha de egreso hay que pulsar la tecla enter o la flecha del teclado abajo, porque si se lo hace de otra manera (ejemplo la tecla tabulador) el rango de celdas a pintar no se respeta ya que el código toma la celda activa para efectuar los cambios.
2) El código funciona si los cambios se hacen de a una celda a la vez, si selecciono un rango de celdas para cambiar sus valores simultáneamente da error ("No coinciden los tipos".
¿Es posible solucionar estás 2 limitaciones o al menos la 2da.?
CODIGO:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
Private Sub Worksheet_Change(ByVal Target As Range)
'Comenté las 2 líneas siguientes para que vean las LIMITACIONES
'Application.EnableEvents = False
'On Error GoTo Error
Dim KeyCells As Range
' La variable KeyCells contiene el rango
' de las celdas que se controlará su cambio.
' para este caso he creado un nombre de rango para G5:G495
'que corresponde a la columna de Fecha de Egreso
Set KeyCells = Range("FechaEgreso")
If Not Application.Intersect(KeyCells, Range(Target.Address)) _
Is Nothing Then
'Si el cambio en una de las celdas contiene un valor
'es distinto que vacio le pondrá color de relleno verde
If Range(Target.Address).Value <> "" Then
'pintará la celda cambiada y 6 celdas hacia su izquierda
'a la celda cambiada le pongo -1 porque al ingresar un valor
'y dar enter la celda activa es la de abajo de esa (LIMITACION)
Range(ActiveCell.Offset(-1, 0), ActiveCell.Offset(-1, -6)).Select
'elige un color verde para el rango a pintar
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 65280
End With
'luego de pintar posiciona el cursor
'una celda + abajo que la cambiada
ActiveCell.Offset(1, 6).Select
End If
'si el cambio en la celda fue borrar un valor
If Range(Target.Address).Value = "" Then
'remueve el color verde de todo el rango
Range(ActiveCell.Offset(0, 0), ActiveCell.Offset(0, -6)).Select
'eligiendo un color de relleno blanco
With Selection.Interior
.ColorIndex = 0
End With
'luego de revertir el color de relleno a blanco
'posiciona el cursor en la misma celda que se
'borró el valor
ActiveCell.Offset(0, 6).Select
End If
End If
'Comenté las 2 líneas siguientes para que vean las LIMITACIONES
'Error:
'Application.EnableEvents = True
End Sub
CAPTURA DE PANTALLA CAMBIANDO VALOR A UNA CELDA: :)
ERROR SI INTENTO CAMBIAR VARIAS CELDAS A LA VEZ: :(
Adjunto archivo de Excel Microsoft 365
Muchas gracias por la ayuda que me puedan brindar.
- base-de-datos-empleados_2021.rar(38,4 KB)
Valora esta pregunta


0