Para hacerlo tendremos que modificar un poco el código de la macro de la nota anterior, agregando el mecanismo para crear colores de fondo en forma aleatoria. Además tendremos que asegurarnos que el tono de los colores no oculte el contenido de las celdas.
El código modificado es el siguiente:
Sub mostrar_nombres_dif_color()
Dim n As Name
Dim strNameStart As String
On Error Resume Next
Application.ScreenUpdating = False
For Each n In ActiveWorkbook.Names
With Range(n.RefersTo).Interior
.ColorIndex = Int((56 * Rnd) + 1)
.TintAndShade = 0.9
End With
strNameStart = Left(n.RefersTo, WorksheetFunction.Find(":", n.RefersTo) - 1)
With Range(strNameStart)
.AddComment
.Comment.Text n.Name
.Comment.Visible = False
End With
Next n
Application.ScreenUpdating = True
On Error GoTo 0
End Sub
Como puede apreciarse estoy usando la expresión Int((56 * Rnd) + 1) para generar números enteros entre 1 y 56. Como alguno de estos colores son oscuros e impedirían ver el contenido de las celdas, usamos la propiedad .TintAndShade con un valor de 0.7 para obtener tonos pálidos. Si queremos tonos má claros usamos números más cercanos al 1, por ejemplo 0.85.
El resultado puede verse en esta animación
He agregado la sentencia On Error Resume Next para evitar la interrupción de la rutina si en la primer celda del rango ya existe un comentario. En ese caso el comentario original quedará y no se registrará el nombre del rango.
Como cuestión de buena práctica recomiendo no usar On Error Resume Next tal como se ve en el código. Pero me permito esta licencia ya que se trata de una pequeña herramienta que puede resultar útil al construir modelos complejos.
Excelente don Jorge...! Nuevamente sorprendiendo, no solo con lo atinado de la solución sino por lo rápido de su respuesta...
ResponderBorrarNuevamente, muchas gracias...!
R Mena