Ejecutar Macro con el cambio de color de una celda

DOL54

New Member
Joined
May 31, 2016
Messages
3
Hola amigos.
En una hoja excel, hago la conciliación bancaria y pinto cada celda de un rango ("k14:L4000") que coincide con el resumen del banco. Quisiera que la celda adjunta (M14:M4000) marque una "x" en el momento que pinto la celda. Así, de esta forma puedo filtrar todos los cambio ("x") para poder encontrar las diferencias.
 

Excel Facts

Highlight Duplicates
Home, Conditional Formatting, Highlight Cells, Duplicate records, OK to add pink formatting to any duplicates in selected range.
Hola Dol
Para hacer esto vas a necesitar una mezcla de VBA en una UDF (Función definida por el usuario) y una formula, la formula es:
M14=SI(cellbgcolor(K14)<>-4142;"X";"")
Y la UDF es muy simple es:
Code:
Function cellbgcolor(r As Range) As Integer
'
' Devuelve elcolor del fondo como integer
'
  cellbgcolor = r.Cells(1, 1).Interior.ColorIndex
End Function

Saludos
Sergio
 
Upvote 0
Gracias Sergio por tu respuesta.
No soy un experto en programación. Solo intento agilizar mi trabajo y carezco de muchos conocimientos.
Intuyo que la formula condicional irá en cada celda de la columna "M" del rango ("M14:M4000") y que la función al igual que VB en la misma hoja (etiqueta > ver codigo ...).

Así lo hice pero :
En la columna "M" queda la formula como texto : =SI(cellbgcolor(K14)<>-4142;"X";"") y no me funciona al cambiar de color la celda "k14". Además te recuerdo, que la celda ("M"), deberá marcar una "X" tanto si coloreo la celda "M" como la "L" del rango ("L14:M4000")

Saludos y perdón por la ignorancia.
Daniel

<colgroup><col width="22"></colgroup><tbody>
</tbody>
 
Upvote 0
Daniel,

Un par de cosas:

1. No existe manera de hacer exactamente lo que usted pide. Cambiar el color de una celda no "levanta un evento" (does not "Raise an Event"). Por eso no existe manera de "atrapar" un evento y resolverlo en el momento de cambiar el color. La solución que le ofrece Sergio es más o menos lo más cerca que podrías llegar. Hay otras soluciones muchas más complejas y no brindarán resultados mucho mejores que la de Sergio.

2. Edite la función de Sergio un poquito:
Code:
Function cellbgcolor(r As Range) As Integer
'
' Devuelve elcolor del fondo como integer
  Application.Volatile True
  cellbgcolor = r.Cells(1, 1).Interior.ColorIndex
End Function


Con poner eso de "volatile true", cada vez que usted cambia el VALOR (no el COLOR) que cualquiera celda, todas las celdas con su función vuelven a calcular.
 
Upvote 0
Hola Daniel
Muy bueno el comentario del MVP, gracias Greg!

Para que la formula evalúe mas que la celda K14 y pruebe la L14 también, podes cambiar la formula (no la UDF) a:

M14=SI(o(cellbgcolor(K14)<>-4142;cellbgcolor(L14)<>-4142);"X";"")

Para que la formula se reevalue despues de que se cambian los colores de fondo habria por lo menos dos formas para forzar el recalculo:

- Cambiando un valor, usando la UDF modificada por Grag
- O haciendo una macro que pegue la formula =si(... en toda la columna M, esto fuerza el recalculo

Saludos
Sergio
 
Upvote 0
Pero de cualquier forma, nada va a cambiar en el momento que usted cambia el color. La hoja se actualiza solamente el momento de cambiar un valor.
 
Upvote 0
Hola amigos.
En una hoja excel, hago la conciliación bancaria y pinto cada celda de un rango ("k14:L4000") que coincide con el resumen del banco. Quisiera que la celda adjunta (M14:M4000) marque una "x" en el momento que pinto la celda. Así, de esta forma puedo filtrar todos los cambio ("x") para poder encontrar las diferencias.

Que celda estas pintando?
Donde quieres que se ponga la "x"?
Necesitas que la "x" aparesca en el siguiente instante despues de pintar la celda o una vez pintadas todas las celdas hacer apareceer las "x"
 
Upvote 0

Forum statistics

Threads
1,214,987
Messages
6,122,614
Members
449,090
Latest member
vivek chauhan

We've detected that you are using an adblocker.

We have a great community of people providing Excel help here, but the hosting costs are enormous. You can help keep this site running by allowing ads on MrExcel.com.
Allow Ads at MrExcel

Which adblocker are you using?

Disable AdBlock

Follow these easy steps to disable AdBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the icon in the browser’s toolbar.
2)Click on the "Pause on this site" option.
Go back

Disable AdBlock Plus

Follow these easy steps to disable AdBlock Plus

1)Click on the icon in the browser’s toolbar.
2)Click on the toggle to disable it for "mrexcel.com".
Go back

Disable uBlock Origin

Follow these easy steps to disable uBlock Origin

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back

Disable uBlock

Follow these easy steps to disable uBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back
Back
Top