Jump to content
Sign in to follow this  
TAVO1

Insertar comentarios en celda con datos de otra.

Recommended Posts

Hola Amigos, muchas gracias por sus consejos y ayudas que nos dan a las dudas que tenemos, os vengo a solicitar ayuda sobre una macro que me coge datos en la columna A y B, y lo coloca como comentario en celda F6. Esta macro la encontré en Todo.Expertos, lo que yo quisiera es que las cantidades en números por ejemplo 9,000.00 me lo pusiera tal como está su formato de origen, y también poder hacer el rango de A y B, dinámico, que si pongo datos desde A1:B4 me copie todos, o si coloco datos desde A1:B15, que copie todo el rango. Como opcional, quisiera si los datos del Rango A, quedaran alineados a la izquierda y los datos del rango B, quedaran alineados a la derecha en el comentario de F6.

Muchas gracias anticipada por vuestra ayuda.

INSERTAR COMENTARIOS.zip

Share this post


Link to post
Share on other sites

Hola TAVO1,

prueba con esta macro a ver cómo sale:

Sub prueba()

Dim Celda As Range, Texto As String, Separador As String

For Each Celda In Range("a1", Range("a" & Rows.Count).End(xlUp))
With Celda
Separador = Application.Rept(" ", 50 - Len(.Value) - Len(.Offset(, 1).Text))
If Texto = vbNullString Then
Texto = .Value & Separador & .Offset(, 1).Text
Else
Texto = Texto & vbLf & .Value & Separador & .Offset(, 1).Text
End If
End With
Next Celda
With Range("f6")
.ClearComments
.AddComment.Text Texto
With .Comment
With .Shape.TextFrame
.Characters.Font.Name = "Courier New"
.AutoSize = True
End With
.Visible = True
End With
End With

End Sub[/CODE]

Share this post


Link to post
Share on other sites

Muchas gracias Mjrofra, es el segundo mensaje que te escribo, el otro no lo pude enviar, no estoy en casa debe ser por eso, he leido mucho tus mensaje de otros temas y lo que te puedo decir es que Dios te siga bendiciendo, ya que eres muy inteligente en esto de las macros, fijate que probé tu codigo y me manda error, El tipo no coincide, no te puedo explicar mas, porque no estoy en casa, pero llego a las 9:00 pm, ahora en México son las 11:10 am, Muchas gracias Mjrofra.

Share this post


Link to post
Share on other sites

hola de nuevo,

intuyendo, de acuerdo con lo que mencionas, es posible que de esta forma se solucione el problema (aunque no sé cuál haya sido el problema y mi intuición no es que sea muy buena :D):

Sub prueba()

Dim Texto As String, Separador As String
Dim Celda As Range
Dim Largo As Long

With Range("a1", Range("a" & Rows.Count).End(xlUp))
Largo = Evaluate("max(len(" & .Address & ")+len(" & .Offset(, 1).Address & "))") + [COLOR="red"]5[/COLOR]
For Each Celda In .Offset()
With Celda
Separador = Application.Rept(" ", Largo - Len(.Value) - Len(.Offset(, 1).Text))
If Texto = vbNullString Then
Texto = .Value & Separador & .Offset(, 1).Text
Else
Texto = Texto & vbLf & .Value & Separador & .Offset(, 1).Text
End If
End With
Next Celda
With Range("f6")
.ClearComments
.AddComment.Text Texto
With .Comment
With .Shape.TextFrame
.Characters.Font.Name = "Courier New"
.AutoSize = True
End With
.Visible = True
End With
End With
End With

End Sub[/CODE]

el [color=red]5[/color] indica los espacios que se dejarán entre los nombres y las cifras. Mejor dicho, prueba modificando el 5 por otros valores para que veas lo que te digo y lo ajustes según lo que mejor te parezca.

Share this post


Link to post
Share on other sites

Buen aporte, no he podido por menos que incluirlo en la aplicación que utilizo para los comentarios, aplicación que hice a base de unir ejemplos y ayudas vuestras. El único cambio que he hecho sobre el de mjofra es que el comentario en lugar de F6 se pone en la celda que se marque. Os la subo por si es de utilidad.

Saludos.

Comentarios.zip

Share this post


Link to post
Share on other sites

Mjrofra muchas gracias por la aclaración, tienes como siempre la razón, lo que pasa es que yo antes de correr la macro anexé otro dato en la fila siguiente, mas grande de lo que dejaste en separador: Separador = Application.Rept(" ", 100 - Len(.Value) - Len(.Offset(, 1).Text)), habías dejado 60, y sinceramente coloqué más texto. Con el ejemplo que me mandaste ya con el archivo, vi que si corría bien, entonces fue lo que descubrí.

Te pido mil disculpa por no haberte informado antes, y te voy a ser sincero tengo un hijo de 3 años y yo llego a casa como a las 8 o 9 pm, y mi hijo ya me está esperando para jugar, su lema de él es juagar y jugar, por lo que no tuve tiempo, y acá en el trabajo tenemos prohibido el internet, tengo que prestar máquina, pero están muy lentas, quiero responder un tema, y cuando le doy click me saca del internet, pero tu ejemplo si lo bajé ayer, aquí en mi trabajo. Eres sinceramente genial, y créeme va ver muchos foreros a quien le va a servir esta macro, porque muchos van a leer tu ayuda y le va a servir como a mí me han ayudado otras soluciones, que tú has dado. Te quiero comentar que antes de solicitarte ayuda quise hacer un bucle con For Next, que recorriera la columna A y B, guardando los datos en una variable y sí la recorría pero me colocaba la última fila de A y B, no me colocaba todos los datos, lo quise hacer copiando y pegando, y no tuve resultado, pero tú si eres un master. Dios te bendiga y un saludo a Avatar. No había leído lo de Lucas225, Muchas gracias, Dios bendiga a los dos y a todos los foreros que más saben, y no menciono nombres para no quedar mal. Gracias Mjrofra por el otro código no lo había checado, es más perfecto aún y a Lucas 225 no tengo palabras, eres estupendo también. Hoy en el trabajo quise responder sus soluciones, pero les repito presto otra máquina, porque la mía no tiene internet, escribí 10 veces mensaje tras mensaje y siempre me mandó este mensaje.

The requested URL is not supported

________________________________________

The requested URL is not supported

Tal como está lo copio, pero ahora si estoy en casa son las 11:01pm en México del 09-Febrero-2010, y les pido mil disculpas a todos, por no contestar antes, me quito el sombrero por las dos soluciones (así se dice en México). Muchas gracias.

Share this post


Link to post
Share on other sites

Mjrofra ya con el segundo código, ya no hay que cambiar la línea comentada en el primer ejemplo, gracias por todo, pero por último y si puedes contestar, porqué será que cambio fuente del código a Tahoma, y me aparece el comentario un poco movido, te doy las gracias por si puedes contestar, y si no creéme, que así me sirve muchísimo, y por favor después de responder, si pudes por favor dar como solucionado el tema. Gracias Dios te bendiga mucho y a Lucas también.

Share this post


Link to post
Share on other sites
...porqué será que cambio fuente del código a Tahoma, y me aparece el comentario un poco movido...

Para que aparezca correctamente alineado tienes que usar una fuente monoespaciada, como courier, consolas, courier new... las fuentes monotipo tienen todos los caracteres del mismo tamaño, así se alinean sin problema. Tahoma no es una fuente monoespaciada, por lo que dos palabras con la misma cantidad de caracteres pueden no alinearse igual:

Un ejemplo, Tahoma tiene 6 caracteres. Courier tiene 7. Sin embargo, mira con se alinean usando la fuente Tahoma:

Tahoma

Courier

Ahora mi como se ven con fuente Courier new:

Tahoma

Courier

Como la alineación en el comenatario se basa en la cantidad de caracteres, es necesario usar una fuente monoespaciada. Yo he escogido Courier New, pero puedes probar con otras siempre y cuando sean monoespaciadas y estén en office:

http://office.microsoft.com/es-es/help/HA102826443082.aspx

Share this post


Link to post
Share on other sites

Hola Mauricio.

En cuanto al fichero que envié, lo único que no me gusta es que en la hoja COMENTARIOS, donde saca todos los comentarios que hay en el libro, no aparece el nombre de la hoja donde se encuentra éste, por más que lo intento, no doy con éllo.

¿Se te ocurre algo?

Gracias y saludos.

Share this post


Link to post
Share on other sites

Hola lucas,

me imagino que estás hablando de la subrutina showcomments. Si es así, prueba con esta modificación de tu código en dicha subrutina, de pronto te dé ideas... este código además añadirá una nueva hoja llamada "Comentarios" cada vez que la ejecutes y si ya existe una hoja así, te preguntará si deseas reemplazarla (esto porque vi que en el código que tenías trabajabas sobre una hoja ya creada en el archivo y de pronto sea más conveniente crear esta hoja cuando se ejecute la subrutina... bueno, no sé, pruébalo a ver):

Sub showcomments()

Dim commrange As Range
Dim mycell As Range
Dim curwks As Worksheet
Dim hjCom As Worksheet

Set curwks = ActiveSheet

On Error Resume Next
Set hjCom = Sheets("Comentarios")

If Err.Number = 9 Then
Sheets.Add.Name = "Comentarios"
Else
hjCom.Activate
If MsgBox("Ya existe una hoja llamada comentarios." _
& vbLf & vbLf & "¿Desea reemplazarla?", _
vbOKCancel, "Reemplazar hoja") = 1 Then
hjCom.UsedRange.Clear
Else
Exit Sub
End If
End If

Set commrange = curwks.Cells.SpecialCells(-4144)
On Error GoTo 0

If Not commrange Is Nothing Then
For Each mycell In commrange
Range("a1:d1") = Split("CELDA,VALOR,COMENTARIO,HOJA", ",")
With mycell
Range("a" & Rows.Count).End(xlUp).Offset(1).Resize(, 4) = _
Array(.Address, .Value, .Comment.Text, .Parent.Name)
End With
Next mycell
Else
MsgBox "No hay ningún comentario...", 4160, "COMENTARIOS"
End If

End Sub[/CODE]

Share this post


Link to post
Share on other sites

Hola Mauricio, gracias por contestar.

Sí, es buena idea que reemplace la hoja, pero no me refería a eso, lo que yo intento es que me liste los

comentarios de todas las hojas del libro, en el código que pones solo coloca la hoja donde está el userform,

no las otras, verás que con ShowModal=False coloca comentarios en otras hojas sin tener que cerrar el Userf...

ó en varias celdas a la vez, pero con "showcomments" sólo pone los comentarios de una hoja y no de

todas... yo no controlo esto demasiado, pero podría ser algo así como "a" & Rows.Count... etc., pero

contando las hojas que tiene el libro.

Gracias de nuevo y saludos.

Share this post


Link to post
Share on other sites

Buenod dias Lucas225, tengo una duda. Cuando inserto un comentario en unas celda cualquiera siempre me sale el mismo comentario, gustavo 90000, mantto 100000. Etc. me puedes decir que hago mal.

Saludos

Share this post


Link to post
Share on other sites

Hola 5402... Si pulsas el botón con el icono Excel te saldrá el texto que hay en A1:B, es una aportación de Mauricio, también puede ser porque en la ventana de texto del Userform tienes puesto ese texto como comentario, borralo (hay un botón que lo hace) y escribe otro comentario, ó captura alguno de los comentarios que hay en la hoja y ponlo, (prueba el efecto de cada botón) te tiene que funcionar...

Saludos.

Share this post


Link to post
Share on other sites
...lo que yo intento es que me liste los comentarios de todas las hojas del libro...

bueno, entonces creo que algo así podría funcionar o al menos dar una idea para empezar:

Sub showcomments1()

Dim celda As Range
Dim hj As Worksheet

Const Nom_hj As String = "Comentarios"

On Error Resume Next
Sheets(Nom_hj).Activate

If Err.Number = 9 Then
Sheets.Add.Name = Nom_hj
Else
If MsgBox("Ya existe una hoja llamada comentarios." _
& vbLf & vbLf & "¿Desea reemplazarla?", _
vbOKCancel, "Reemplazar hoja") = 1 Then
ActiveSheet.UsedRange.Clear
Else
Exit Sub
End If
End If

For Each hj In ActiveWorkbook.Worksheets
If hj.Name <> Nom_hj Then
For Each celda In hj.Cells.SpecialCells(xlCellTypeComments)
Range("a1:d1") = Split("CELDA,VALOR,COMENTARIO,HOJA", ",")
With celda
Range("a" & Rows.Count).End(xlUp).Offset(1).Resize(, 4) = _
Array(.Address, .Value, .Comment.Text, .Parent.Name)
End With
Next celda
End If
Next hj

End Sub[/CODE]

el código anterior puede ser un poco lento si son muchos comentarios, así que de pronto convenga trabajar con una matriz para luego volcar su resultado en el rango correspondiente.

El siguiente código hace eso (y ya que este código puede resultar un poco más complicado de entender y también a la sugerencia de un amigo de por acá del foro, añado comentarios al código para que sea más fácil entenderlo y modificarlo):

[CODE]Sub showcomments2()

'Dimensionamos las variable correspondientes
Dim celda As Range
Dim rgcoms As Range
Dim hj As Worksheet
Dim i As Long
Dim coms() As String

'este va a ser el nombre para la hoja de salida
Const Nom_hj As String = "Comentarios"

'Establecemos el tamaño inicial de la matriz coms
ReDim coms(3, 0)

'asignamos los encabezados a la matriz coms
coms(0, 0) = "HOJA"
coms(1, 0) = "CELDA"
coms(2, 0) = "VALOR"
coms(3, 0) = "COMENTARIO"

'iniciamos el contador para la segunda dimensión de la matriz
i = 1

'continuar con la ejecución del código en caso de errores
On Error Resume Next

'recorremos todas las hojas del libro
For Each hj In ActiveWorkbook.Worksheets

'si la hoja no se llama "Comentarios"
If hj.Name <> Nom_hj Then

'asignamos al rango rgcoms las celdas con comentarios de la hoja
Set rgcoms = hj.Cells.SpecialCells(xlCellTypeComments)

'si el rango rgcoms tiene celdas (es decir, en la hoja había celdas con comentarios)
If Not rgcoms Is Nothing Then

'redimencionamos la matriz coms para albergar los nuevos datos
ReDim Preserve coms(3, UBound(coms, 2) + rgcoms.Count)

'recorremos cada celda de las celdas con comentarios subiendo
'el dato correspondiente a la matriz
For Each celda In rgcoms

With celda
coms(0, i) = .Parent.Name 'nombre de la hoja de la celda
coms(1, i) = .Address 'dirección de la celda
coms(2, i) = .Value 'valor que se encuentra en la celda
coms(3, i) = .Comment.Text 'comentario de la celda
End With

i = i + 1
Next celda
End If
Set rgcoms = Nothing
End If
Next hj

'si el tamaño de la matriz es igual al tamaño inicial se finaliza la macro
If UBound(coms, 2) = 0 Then
MsgBox "No se encontraron comentarios."
Exit Sub
End If

'activamos la hoja llamada comentarios
Sheets(Nom_hj).Activate

'si no hay hoja llamada comentarios...
If Err.Number = 9 Then

'... se crea la hoja
Sheets.Add.Name = Nom_hj
Else

'... si existe se pregunta si se desea reemplazarla
If MsgBox("Ya existe una hoja llamada comentarios." _
& vbLf & vbLf & "¿Desea reemplazarla?", _
vbOKCancel, "Reemplazar hoja") = 1 Then
ActiveSheet.UsedRange.Clear
Else
Exit Sub
End If
End If

'se copia la matriz coms al rango correspondiente en la hoja "Comentarios"
Range("a1:d1").Resize(UBound(coms, 2)) = Application.Transpose(coms)

End Sub[/CODE]

bueno, son unas ideas para ir arrancando, ya tu las depurarás y las pondrás al cien :D.

Share this post


Link to post
Share on other sites

Perfecto, ni se me había pasado por la cabeza utilizar matrices, jo! algún día se me ocurrirán a mí esas cosas... ja!

Subo el resultado para que lo utilicéis como os convenga, creo que ya no se le puede pedir nada más a la utilidad,

aunque siempre pueden surgir ampliaciones con nuevas ideas.

De nuevo gracias y un saludo.

Comentarios.zip

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.

INFORMACIÓN BÁSICA SOBRE PROTECCIÓN DE DATOS

Responsable: Sergio Andrés Celemín

Finalidad: Moderar y responder comentarios de usuarios. Recuerda que la información que facilites es pública, y los datos que incluyas los leerá cualquier visitante de esta web, así como el avatar que poseas.

Legitimación: Consentimiento del interesado.

Destinatarios: Hetzner Online GmbH.

Derechos: Puedes ejercitar en cualquier momento tus derechos de acceso,
rectificación, supresión, oposición y demás derechos legalmente establecidos a
través del email sergio@ayudaexcel.com.

Información adicional: Encontrarás más información en la política de privacidad.

Sign in to follow this  



×
×
  • Create New...

Important Information

Privacy Policy


CTA Templates.png