Comentarios de celdas

Respuesta de
a
Usuario
En el editor de macros de visual basic para excel, en el explorador de proyectos, y más concretamente en "thisworkbook" he creado un procedimiento workbook_open ()
En el que he incluido la siguiente expresión:
Worksheets(1).PageSetup.PrintComments = xlPrintSheetEnd
... lo que hace que los comentarios de las celdas, se impriman o aparezcan en la presentación preliminar, al final del documento.
Hasta aquí todo correcto.
El problema es que en dicho resumen, por cada comentario aparece lo siguiente:

"Celda: " (.. la dirección de la celda)
"Comentario: " (el comentario)
¿Sabes alguna manera de que no aparezcan ni la palabra "celda" con la dirección de la celda ni la palabra "comentario"?

Gracias.
Avatar
Experto
Hola, brali!

La verdad es que desconozco que eso se pueda lograr...

Sin embargo pensé en esta macro que los escribe al final del rango a imprimir (deberías deshabilitar aquella opción de impresión, pues no la necesitarás).

Este es el código:

Sub MuestraComs()
'
Dim com As Comment
Dim CeldaIni As Range

Set CeldaIni = Range("A11") 'primera celda donde escribir los comentarios
vCol = CeldaIni.Column

For Each com In ActiveSheet.Comments
'Determina línea donde copiar datos
If IsEmpty(CeldaIni) Then
vRow = CeldaIni.Row
ElseIf CeldaIni.End(xlDown).Row > 50000 Then
vRow = CeldaIni.Offset(1).Row
Else
vRow = CeldaIni.End(xlDown).Offset(1).Row
End If
comenta = com.Text
comenta = comenta & " (@ " & com.Parent.Address(False, False) & ")" ' Si no quieres que indique en qué celda, anula o elimina esta línea
Cells(vRow, vCol).Value = comenta
Cells(vRow, vCol).ClearFormats
Next com

'si esto formase parte de un macro de impresión, puedes colocar estas líneas despues de imprimir para que elimine los cometarios mostrados en la celda:

CeldaIni.CurrentRegion.ClearContents

' sino anula la linea anterior y sigue con:

Set CeldaIni = Nothing
End Sub

Espero que esto ayude a resolver tu problema.
Si así fuera, agradeceré un comentario y que la finalices.
(Recuerda que mantener cierto número de respuestas pendientes impide que otros usuarios puedan consultarme)

Un abrazo!
Fernando

"Me lo explicaron y lo olvidé,
lo leí y lo entendí,
lo hice y lo aprendí".

°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
A cambio de mi tiempo, sólo te pido dos cosas:
- Finaliza (con puntaje y comentario) esta pregunta
- Ingresa al sitio www.porloschicos.com y, si quieres,
presiona el botón de donación (es gratis).
Confío en que lo harás. Por ambas cosas, muchas gracias.

°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°


Usuario
Fernando, ante todo muchas gracias.
No la he probado todavía pero desde luego que funcionará.
Yo ya tenía una compleja macro para imprimir los comentarios (si lo deseas puedo enviártela para que la veas) pero con el problema de esas 2 palabras "Celda:" y "Comentario:"
De todas formas te escribo para preguntarte algunas cosas a cerca de esta macro que me envías.
1.He intentado comprender la macro pero no la entiendo.
¿Sería mucho pedir que me la explicaras un poco má?.
Por ejemplo:
a) la sentencia "IF...END IF" no la entiendo
b) ¿Por qué utilizas "clearformats" y/o "clearcontents"?

2.Aclarame este punto:
Supongo que has cogido la celda A11, imagiando que hay comentarios en las anteriores (por ejemplo desde la A1 hasta la A10) y lo que haces es escribir los comentarios de dichas celdas como el contenido o texto de la celda A11 en adelante. ¿Es así?

3.Por último, entiendo que cuando se hace la presentación preliminar o impresión, se imprimirá la hoja de calculo completa conteniendo los valores de la celdas del rango a1:a10 ademas de las celdas desde la a11 con los comentarios (siendo en realidad los textos anteriores)¿Es así?
Perdona por esta larga duda que te expongo pero tengo esa especia de "gusanillo" por saber como funcionan y el por que de las cosas.
Por supuesto que finalizaré la consulta y la puntuaré convenientemente.
Gracias de nuevo.
Avatar
Experto

Hola, Brali!

Para explicar la primer pregunta necesito aclarar un punto de la segunda:

La selección de la celda A11 fue arbitraria, pudiendo ser modificada por cualquiera que se encuentre al pie del área original de impresión, es decir la celda a partir de la cual quieres que se muestren los comentarios que haya en la hoja.
Como la rutina, revisa TODOS los comentarios existentes (no sólo los del rango A1:A10) asumo que NO hay comentarios anteriores volcados previamente en la hoja.
Por ello es que te sugerí que después de imprimir, una rutina borrara los comentarios que había escrito la macro.

Entonces A11 (o la celda que le indiques) será considerado por la rutina que encierra el IF...END IF de tu primera consulta.
Esta estructura lógica sirve para determinar el número de fila donde debe escribir el comentario que se haya encontrado.


La macro asigna esta celda a la variable "Celdaini" y pregunta si esa celda está vacía.
[ If IsEmpty(CeldaIni) Then ]

Si estuviera vacía, el número de fila a utilizar coincide con la fila de esta variable.
Pero si no estuviese vacía (por ejemplo, por un dato cargado anteriormente), la macro prueba ejecutar el equivalente de teclado de "Fin" | "Abajo".
Esto hace que el cursor se detenga en la próxima celda vacía. Si celdaini no tuviera datos por debajo de ella esto provocaría que el cursor se vaya a la última fila de la hoja. Si esto ocurre, la macro sabe que la próxima fila a utilizar será la que está inmediatamente después de la fila de la celda A11.
(CeldaIni.Offset(1).Row).
Pero en el caso de que hubiera más datos por debajo de celdaini la macro simplemente deberá ocupar la fila inmediatamente posterior a la última ocupada.

De esta manera están cubiertos todos los casos posibles y como resultado siempre se obtiene un número de fila donde dejar el dato que se está trabajando. Este numero de fila se guarda en la variable vRow.

Luego, cuando se detecta el texto del comentario que deberá volcar en una celda, la macro utiliza la variable vRow (y la variable vCol) para indicar la dirección exacta de tal celda.
Habrás notado que el texot del comentario se guarda en la variable comenta y permite agregarle una referencia a la celda dónde se encontró.
Sabiendo cuál es el comentario y en qué celda guardarlo, la macro vuelca ese contenido. Por tratarse de un texto especial, al ingresarlo en la celda MS Excel le da un formato que ajusta la altura de la celda para que se lea todo el comentario.
Como esto puede ser inapropiado, utilizo el método de Limpiar Formatos (clearformats) para evitar este resultado.

El uso de Clearcontents es al solo efecto de eliminar los comentarios volcados en las celdas luego de la impresión.

Hay que tener cuidado con esto porque si no hubiera una llamada de impresión previa a que se borren los datos, la macro habría sido inútil pues se borraría lo mismo que acaba de hacer.

Eventualmente, podrías querer no borrar estos textos, pero recuerda que la macro siempre considera todos los comentarios de la hoja, pudiendo duplicar datos ya volcados anteriormente, por eso conviene borrarlos una vez impresos y que los regenere cada vez que fuese necesario.

Finalmente, estos comentarios agragdos por la macro estarán dispinibles en la visión priliminar, a menos que hayas definido un rango de impresión que los excluya.

Bien, espero haber sido suficientemente claro, pero no dudes en consultarme si aún tienes dudas.

Un abrazo!
Fernando
Usuario
Me considero suficientemente satisfecho y te puntúo con la máxima.
La verdad es que no había pensado en la posibilidad que me has ofrecido, es decir, la de copiar los comentarion en simples celdas.
Lo incluiré en mi hoja de cálculo sustituyendo la que tengo actualmente, "con pesar de mi corazón" ya que dicha macro (mi macro) la considero muy especial: no soy un programador pero he llagado a hacer algo que funciona muy bien.
Te deseo mucha suerte.