Necesito que los comentarios de las celdas se conviertan en mensajes de entrada

Hola a todos.
Tengo un problema con un informe excel en el que tengo que trabajar. El caso es que por defecto, la plantilla que necesito tiene insertados comentarios en casi todas las celdas (que son muchísimas...) y necesito que esos comentarios se conviertan en Mensajes de Entrada (en "Validación de datos"), ya que necesito introducir unos comentarios completamente diferentes a los que hay puestos y, sin embargo, poder conservar estos comentarios que también necesito. El Mensaje de entrada es una buena forma de conservar esos comentarios, por ello pregunto si hay alguna forma de hacerlo masivamente, porque ahora lo que estoy haciendo es ir celda por celda copiando el texto del comentario y pegándolo como Mensaje de entrada, lo cual es excesivamente tedioso, dado la amplitud del informe que preparo.
Muchas gracias por vuestra amable atención.
Recibid un cordial saludo.
1

1 Respuesta

222.425 pts.
El siguiente código crea validaciones en las celdas que tengan comentarios en Hoja1, pero sólo en el caso de que la celda no tenga ya una validación:
Sub prueba()
    Dim rngCelda As Range
    With Worksheets("Hoja1")
        .UsedRange
        For Each rngCelda In .UsedRange.Cells
            'Si la celda tiene un comentario ...
            If Not rngCelda.Comment Is Nothing Then
                ' ... y no tiene validación
                If Intersect(rngCelda.SpecialCells(xlCellTypeAllValidation), rngCelda) Is Nothing Then
                    'Crear la validación
                    With rngCelda.Validation
                        .Add Type:=xlValidateInputOnly, _
                                   AlertStyle:=xlValidAlertStop, _
                                   Operator:=xlBetween
                        .InputTitle = "Título (si se quiere poner uno)"
                        .InputMessage = .Parent.Comment.Text
                    End With
                    'Borrar el comentario
                    rngCelda.Comment.Delete
                End If
            End If
        Next rngCelda
    End With
    Set rngCelda = Nothing
End Sub
Si lo pruebas, hazlo sobre una copia del libro por si no hace exactamente lo que necesitas.
Gracias por tu ayuda, y perdona que te siga preguntando.
Entiendo que debo hacer esto con el Visual Basic, de la pestaña [Programador] del Excel (2007). Lo digo porque no soy desarrollador y mis conocimientos son muy limitados en lo que se refiere a esto. Yo tengo un libro con unas 8 hojas. La hoja sobre la que quiero aplicar esto se llama "VN". No tiene ningún tipo de validación y es un libro de excel normal, pero en formato 2007. ¿Cuál sería el procedimiento? Entiendo que debo ir al Visual, pegar el código, ¿guardarlo y luego ejecutar la macro sobre el libro? ¿Me lo podrías detallar un poco...?
Bueno..., perdona mi ignorancia sobre esto.
Muchas gracias por tu ayuda.
Pues me temo que no tengo el Excel 2007 sino el 2003.
No sé si habrá habido muchos cambios respecto a VBA en esta última versión. Lo único que puedo hacer es decirte cómo se metería el código en Excel 2003:
- Alt F11 (o Herramientas -> Macros -> Editor de Visual Basic) para acceder al editor de VBA
- Insertar -> Módulo
- Pegar el código que puse en mi mensaje anterior
- F5 para ejecutarlo
Antes de ejecutarlo tendrás que sustituir "Hoja1" por "VN", que es como dices que se llama la hoja. Recuerda también que es mejor que lo pruebes con una copia del libro, para no liarla si no hace exactamente lo que necesitas.
Si no te funciona, cierra la pregunta y abre una nueva para ver si alguien puede decirte cómo hacerlo en Excel 2007.
Muchas gracias. Al final me ha válido... Eso sí, he tenido que cambiar un par de cosillas:
Sub prueba()
    Dim rngCelda As Range
    With Worksheets("VN")
        .UsedRange
        For Each rngCelda In .UsedRange.Cells
            'Si la celda tiene un comentario ...
            If Not rngCelda.Comment Is Nothing Then
                    'Crear la validación
                    With rngCelda.Validation
                        .Add Type:=xlValidateInputOnly, _
                                   AlertStyle:=xlValidAlertStop, _
                                   Operator:=xlBetween
                        .InputTitle = ". "
                        .InputMessage = .Parent.Comment.Text
                    End With
                    'Borrar el comentario
                    rngCelda.Comment.Delete
                End If
        Next rngCelda
    End With
    Set rngCelda = Nothing
End Sub
Todo genial. Muchísimas gracias.
Un saludo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas