Protección del formato condicional (Microsoft Excel)
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.