martes, 9 de abril de 2019

Comentarios en Excel con VBA

En entrada de fecha Noviembre 2018 (video 17 del canal) hablamos de los estilos en Comentarios: diferentes formatos de fuente, colores, formas e incluso con imágenes.

En esta oportunidad veremos cómo programar el agregado de comentarios en diferentes eventos.

Al cambio en celdas.
1 - El primer ejemplo se trata de agregar un comentario a medida que vamos rellenando la tabla con datos. Si el importe registrado en col C es < a cierto valor se indicará con un comentario.
Nota: para este ejemplo también es válida la opción de dejar un formato condicional. Pero el tema que nos ocupa hoy son los comentarios.

En el Editor, seleccionaremos el objeto HOJA donde se encuentre nuestra tabla de datos y allí colocaremos el siguiente código. El método utilizado es AddComment.

      Private Sub Worksheet_Change(ByVal Target As Range)
      'no se evalúan los cambios en fila 1
      If Target.Row = 1 Then Exit Sub
      'si el cambio se da en col 3 (C)
      If Target.Column = 3 Then
          'si la cifra es < 100 se deja nota
          If Target.Value < 100 Then Target.AddComment "Atención con este importe."
      End if
      End Sub



2 - En el segundo ejemplo se trata de agregar texto a comentarios que ya se encuentran en una celda.
Se trata de rellenar una tabla de días. Como son diferentes usuarios los que pueden registrar información se coloca un comentario por cada usuario que ha modificado las celdas de un rango de días. La información que se agrega es el nombre de usuario y el importe que ha registrado.

      Private Sub Worksheet_Change(ByVal Target As Range)
      'no se evalúan los cambios en fila 1
      If Target.Row = 1 Then Exit Sub
      'si el cambio se da en tabla de días ubicada a partir de col G
      If Target.Column > 6 Then
          'se agrega cada usuario e importe registrado en celdas de días
          On Error Resume Next
          comento = Target.Comment.Text
          'si es la 1ra vez se crea el comentario
          If comento = "" Then
              Target.AddComment Application.UserName & "_" & Target.Value
          Else
              Target.Comment.Text Text:=comento & Chr(10) & Application.UserName & "_" &          Target.Value
          End If
      End If
      End Sub

Primero se evalúa si la celda ya tiene comentarios. Si no lo tiene se agregará con el método AddComment visto en punto anterior.
Si lo tiene, se agrega un salto de línea y el nuevo comentario que será el nombre del usuario y el importe ingresado.


Agregar comentarios desde un proceso general.
También es posible contar con un proceso que se ejecutará desde cualquier otro evento, por ejemplo al clic de un botón, y allí evaluar si colocar o no un comentario en algunas celdas.
En el ejemplo se trata de armar un resumen de cierta tabla de datos y evaluar el resultado de cierta columna. Si es < a cierto valor se dejará un comentario en esa celda.

      Sub pasaTotal()
      'x Elsamatilde
      'fin del rango de datos
      fini = Range("E1").End(xlDown).Row
      desti = Range("E" & Rows.Count).End(xlUp).Row + 1
      'se copia el rango E:F
      Range("E2:F" & fini).Copy
      Range("E" & desti).PasteSpecial xlPasteValues
      'se recorre el rango y coloca comentarios si el total es < 10
      For i = desti To Range("E" & Rows.Count).End(xlUp).Row
          If Range("F" & i) < 10 Then Range("F" & i).AddComment "Revisar valor"
      Next i
      End Sub
Esta macro se coloca en un módulo del Editor. Y se ejecutará desde un atajo de teclado, un botón o desde el mismo menú Desarrollador (o Programador). También es posible que sea llamada desde otro proceso con la instrucción:
      Call pasaTotal


El tema Comentarios da todavía para mucho más. En entradas siguientes seguiré desarrollando el tema.
                                   Descargar ejemplo desde aquí

                                   Ver VIDEO N° 24.