Macro que cambie el comentario de celda

Hola,
Tengo una tabla de datos que van cambiando de acuerdo a una instrucción dada por una macro, sin embargo hay celdas donde el texto es muy largo pero es importante verlo, la idea que tengo es hacer que el comentario de la celda sirva para mostrar el texto completo de la celda. Tengo una parte del código que ya hace algo de esa tarea.
Sub Macro3()
On Error Resume Next
Set MiComentario = ActiveCell.Comment
If MiComentario Is Nothing Then
If ActiveCell.Comment = "" Then
nuevo = ActiveCell
ActiveCell.AddComment.Text Text:=nuevo
Else
End If
Else
Texto = ActiveCell.Comment.Text
nuevo = ActiveCell
ActiveCell.Comment.Text Text:=""
ActiveCell.Comment.Text Text:=nuevo
End If
End Sub
Como pueden ver la macro cambia el texto del comentario y lo deja igual al que está en la celda pero solo si se presiona el botón al que se le aplicó la macro. Mis consulta es la siguiente
Como puedo lograr que al presionar el botón deje el comentario igual al valor actual que tiene la celda en un rango determinado de celdas, me explico: tengo el rango "B5:G9", quiero que cada vez que presione el botón todas las celdas de ese rango actualicen su respectivo comentario.
Gracias

1 respuesta

Respuesta
1
Prueba esto
Inserta un nuevo modulo a tu proyecto y pega esto:
Option Explicit
Dim RI As Integer
Sub recorre()
Dim i As Integer
Dim cad As String
Dim tc As Integer
Dim t As Integer
Application.ScreenUpdating = False
cad = Replace(Selection.Address, "$", "")
RI = Selection.Row
tc = Selection.Column
t = Selection.Columns.Count
For ii = 1 To t
On Error Resume Next
    For i = RI To Trim(Mid(cad, Len(cad), 5))
        Cells(i, tc).Select
        Call Macro3
       DoEvents
     Next
DoEvents
tc = (tc + 1)
Next
Application.ScreenUpdating = True
End Sub
El macro se llama recorre, este recorrerá el rango que seleccionas en la hoja e invocara tu macro3 por cada una de las celdas en que se posicione
Perfecto! Solo faltó definir "ii" como Integer
Una aclaración final: ¿Dentro del código puedo definir cual es el rango seleccionado?
Muchas gracias
Ups!, se me fue, pero tu entiendes de esto y lo captaste de inmediato.
¿Definir el rango seleccionado?, bueno eso lo haces con el mouse antes de correr el macro... pero directo del código, bueno se me ocurre así:
Sub recorre()
Dim i As Integer
Dim ii As Integer
Dim cad As String
Dim tc As Integer
Dim t As Integer
Dim rango As String
rango = "$B$5:$G$9"
Range(rango).Select
Application.ScreenUpdating = False
cad = Replace(rango, "$", "")
RI = Selection.Row
tc = Selection.Column
t = Selection.Columns.Count
For ii = 1 To t
On Error Resume Next
    For i = RI To Trim(Mid(cad, Len(cad), 5))
        Cells(i, tc).Select
        Call Macro3
       DoEvents
     Next
DoEvents
tc = (tc + 1)
Next
Application.ScreenUpdating = True
End Sub
Ok, el código está a punto, pero ahora me surgió un nuevo problema. El rango me toma cualquier columna pero no baja de la fila 9. Ejemplo: Puse el rango M5:N12 y no inserta comentario, pero pongo el rango M5:N9 y si me funciona. Creo que sería lo último en que te consultaría
Muchas gracias
Modifica la linea
  For i = RI To Trim(Mid(cad, Len(cad), 5))
por esta:
  For i = RI To Trim(Mid(cad, Len(cad) - 1, Len(cad)))
Me quede pensando en el tema y creo que con la ultima modificacin aun tendrás problemas, el tema es más complejo al querer inidcarle el rango desde cod y no utilizando el mouse, pero bien, luego de realizar algunas pruebas he llegado a las sgtes lineas, primero el sub recorre queda así:
Sub recorre()
Dim i As Integer
Dim ii As Integer
Dim cad As String
Dim tc As Integer
Dim t As Integer
Dim rango As String
Dim u() As String
Dim q As Integer
rango = "$M$8:$N$13"
Range(rango).Select
Application.ScreenUpdating = False
cad = Replace(rango, "$", "")
u = Split(cad, ":")
For i = 1 To Len(u(1))
    If Mid(u(1), i, 1) > 0 Then
    On Error Resume Next
    q = q & Mid(u(1), i, 1)
    End If
DoEvents
Next
Erase u
RI = Selection.Row
tc = Selection.Column
t = Selection.Columns.Count
For ii = 1 To t
On Error Resume Next
    For i = RI To q
        Cells(i, tc).Select
        Call Macro3
       DoEvents
     Next
DoEvents
tc = (tc + 1)
Next
Application.ScreenUpdating = True
End Sub
Fue necesario tomar una matriz para localizar el valor de la ultima fila del rango, con mid, daba error al ser el rango mayor o menor a 10, en fin.
ahora revisando tu Macro3
le hice algunas modificaciones:
Sub Macro3()
Dim MiComentario As Variant
Dim NUEVO As String
Dim TEXTO As String
On Error Resume Next
Set MiComentario = ActiveCell.Comment
If MiComentario Is Nothing Then
If ActiveCell.Comment = "" Then
NUEVO = (ActiveCell)
ActiveCell.AddComment.Text Text:=NUEVO
Else
End If
Else
TEXTO = ActiveCell.Comment.Text
NUEVO = ActiveCell
ActiveCell.Comment.Text Text:=""
ActiveCell.Comment.Text Text:=NUEVO
End If
End Sub
La variable "nuevo", mejor que quede como string, de esa forma no imorta que ocntenga la celda activa, sea lo que sea lo pasara al comentario.
Bueno, espero que ahora si. si no ... le prendo fuego al teclado.
Me funcionó de maravilla, MUCHAS GRACIAS!
No quiero pasar por cansón, pero en caso de llegarlo a necesitarlo, ¿se puede agregar una opción al código del comentario para que borre el texto o por lo menos el comentario si su correspondiente celda está vacía?
Corrijo el comentario:
Me funcionó de maravilla, MUCHAS GRACIAS!
No quiero pasar por cansón, pero en caso de llegarlo a necesitarlo, ¿se puede agregar una opción al código del comentario para que borre el texto del comentario o elimine el comentario si su correspondiente celda está vacía?
Gracias
Eso ya es otra pregunta, estimado, si la respuesta a tu pregunta original es satisfactoria, te agradecería evaluar y cerrar la pregunta, si tienes otra pregunta, abres otra pregunta

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas