Kees tiene una hoja de trabajo que usa mucho formato condicional.

Sin embargo, el formato condicional sigue estropeándose cuando los usuarios copian y pegan información o cuando usan arrastrar y soltar para editar la hoja de trabajo. Se pregunta cuál es la mejor manera de evitar que esto suceda.

Esto sucede porque el formato condicional se considera solo eso: formato. Copiar y pegar estándar (o editar con arrastrar y soltar)

copia todo, incluido el formato. Esto significa que las celdas de destino tendrán el formato de las celdas de origen, no el formato de las celdas de destino (incluido cualquier formato condicional que pueda haber estado en las celdas de destino).

La respuesta, entonces, es decirles a los usuarios que no hagan una copia y pegue estándar.

En su lugar, deberían usar las opciones de pegar para pegar cualquier cosa (o todo) excepto el formato.

Otra opción, por supuesto, es proteger la hoja de trabajo para que el usuario no pueda copiar y pegar nada. Sin embargo, esto puede ser un poco drástico para sus usuarios, ya que es posible que desee que realicen cambios. (Simplemente no quieres que estropeen el formato condicional).

Esto conduce a un enfoque macro. Si puede grabar una macro que aplique el formato condicional a las celdas, puede crear algunas macros adicionales que apliquen esa macro grabada, según sea necesario. Por ejemplo, digamos que la macro que graba se llama algo corto y sexy como SetCondFormat.

Luego, vaya al Editor de Visual Basic y, en la ventana Inmediato, ingrese lo siguiente:

? Cells.SpecialCells(xlCellTypeAllFormatConditions).Address

Suponiendo que tiene todo el formato condicional configurado, esto debería devolver una línea, tal vez una línea larga, que muestre las direcciones de las celdas y rangos que usan formato condicional. Se verá así:

$B$3:$B$50,$D$3:$D$50,$G$3:$I$20

A continuación, agregue la siguiente macro al módulo de código ThisWorksheet:

Private Sub Worksheet_Change(ByVal Target As Range)

Dim r As Range

Const cCFAddress = "$B$3:$B$50,$D$3:$D$50,$G$3:$I$20"



On Error Resume Next     Set r = Range(cCFAddress)

On Error GoTo 0

If r IsNot Nothing Then         If Application.Intersect(Target, r) IsNot Nothing Then             SetCondFormat         End If     End If End Sub

La clave aquí es asegurarse de que la constante cCFAddress sea igual a lo que se devolvió cuando vio las direcciones en la ventana Inmediato. (Si cambia el formato condicional más adelante, puede usar el truco de la ventana Inmediato nuevamente y simplemente cambiar la línea en la macro anterior).

La macro se ejecuta cada vez que hay un cambio en la hoja de trabajo. Comprueba si la dirección modificada (pasada en la variable de destino) es parte de las celdas originales que contenían formatos condicionales. Si es así, su SetCondFormat (el que grabó para hacer el formateo condicional) se ejecutará nuevamente.

ExcelTips es su fuente de formación rentable en Microsoft Excel.

Este consejo (4362) se aplica a Microsoft Excel 2007, 2010, 2013 y 2016.