La técnica consiste en crear una cuadro de texto y ligarlo a una celda, o mejor aún usar la cámara fotográfica de Excel para crear una imagen dinámica de un rango.
El problema con la técnica que describimos en esa nota es que el objeto se desplaza sólo verticalmente. Es decir que si creamos el objeto con la cámara y lo ubicamos en el área de la columna D, cuando nos movamos hacia la derecha hasta la columna AB, por ejemplo, no veremos el objeto ya que éste no se desplaza horizontalmente.
Para lograr que el objeto se desplace también horizontalmente creamos este evento en el módulo de Vba de la hoja correspondiente
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
With Shapes("Picture 2")
.Left = Target.Offset(0, 1).Left
.Top = Target.Offset(-1, 0).Top
End With
On Error GoTo 0
End Sub
Usamos la propiedad OFFSET para colocar el objeto a la izquierda y arriba de la celda activa. Así por ejemplo, si tenemos una tabla de cotizaciones en el rango A1:B4, después de crear el objeto con la cámara y poner el código en el módulo de la hoja, al seleccionar la celda C6 el cuadro se desplaza de esta manera
Si seleccionamos la celda N3, el cuadro se moverá para sobreponerse al rango O2:P5.
Usamos "On Error Resume Next" para evitar que el código produzca un error y se detenga en caso de seleccionar alguna celda en la fila 1.
Technorati Tags: MS Excel
Hola, Mi Nombre es Frank Pinilla... a una persona como ud no queda mas que decirle gracias, por su colaboracion y dedicacion para poner sus conocimientos al servicio de los demas...de nuevo gracias.
ResponderBorrarConoci su blog gracias al buscador de google...y desde entonces me encanto el blog y sus contenido y ahora estoy aprendiendo a manejar excel casi como un experto.
Mi consulta en esta oportunidad es saber como puedo crear un libro que pueda introducir ventas endiarias por cada vendedor y sus respectivo productos, mes x mes y dentro del mes por cada dia y a la final me de un informe de ventas por vendedor y productos...esto con el fin de realizar un seguimiento de las ventas y introducir los datos a diario al final de la jornada.
agradezco la informacion, respecto a que tema debo consultar para tal fin....de nuevo mil gracias.
frank pinilla
frankpini@gmail.com
Hola Frank
ResponderBorrarbueno...ejem.., gracias.
En cuanto a tu consulta te sugiero que leas en el blog los artículos sobre manejo de pequeñas bases de datos con Excel. En la columna izquierda del blog hay una zona de Etiquetas. Allí hay un enlace a las notas sobre tablas dinámicas, donde puedes encontrar las notas que te sugiero.
Hola mi Nombre es Oscar y quiero felicitarte por tu Blog es EXCEL-ente.
ResponderBorrarUn comentario nada mas. Este truco esta mas que fantastico y en lo personal me va a ahorrar muchos problemas pero he descubierto un pequeño problema:
Cada vez que me ubico en la Fila 1 de cualquier columna, el debuger me tira un error, y es debido a la programacion en el Offset. Yo le hice un pequeño cambio a la linea para que no de el error, sin embargo al trabajar en los limites de la hoja (horizontalmente hacia la derecha) el error siempre continua. En el caso de los limites verticales no he tenido problema.
Este es el pequeño cambio que hice para no tener problemas en mi area de trabajo cerca de la fila 1:
.Top = Target.Offset(-0, 0).Top
Saludos!!
Hola Oscar
ResponderBorraren la anota menciono que usamos On Error Resume Next para evitar el error si nos encontramos en la fila 1. Pero por error copié el código sin esa orden. El código debe incluir On Error Resume Next al principio y On Error Go To 0 al final.
Sr. Jorge.
ResponderBorrarEs posible utilizar este recurso pero solo activando una celda de una columna especifica? ya que tengo una columna donde selecciono de una lista (Priorida 1,...2 etc) y en la caja flotante muestro al descripcion de las prioridades.
Gracias de antemano por sus valiosas aportaciones.
Su amigo
Vic
Vic
ResponderBorrarno me queda clara la consulta. Te refieres a que el cuadro de texto aparezca sólo si se activa una celda de una determinada columna?
Jorge:
ResponderBorrarEs correcto! solo que la caja flotante se activara solo y cuando nos posicionaramos en las celdas de una columna especifica!
En ese caso habría que modificar el código del evento. Por ejemplo, en este código, el cuadro de texto será visible sólo si la celda activa es A10
ResponderBorrarPrivate Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
If Union(Target, [A10]).Address = [A10].Address Then
With Shapes("Imagen 2")
.Visible = msoTrue
.Left = Target.Offset(0, 1).Left
.Top = Target.Offset(-1, 0).Top
End With
Else
Shapes("Imagen 2").Visible = msoFalse
End If
On Error GoTo 0
End Sub
Jorge:
ResponderBorrarMuchas gracias por la ensenanza, mi archivo esta funcionando perfectamente con esta ayuda grafica.
Buenos dias Sr Jorge, que agradable sorpresa al encontrar su valioso blog, pues es de mucha ayuda para todos.
ResponderBorrarQuisiera saber si es posible generar el evento de reposicionar la imagen al mover el scroll y no al selecionar alguna celda, pues asi tendria la imagen fija en una posicion (realmente flotando) y no se ocultaria al mover el scroll. Muchas gracias.
Este comentario ha sido eliminado por el autor.
ResponderBorrarJaime
ResponderBorrares posible, pero es un tema complicado. Si lees inglés te sugiero consultar esta nota de Chip Pearson.
Muchas gracias Jorge, definitivamente hacerlo de manera que el scroll sea un evento es dificil, pero bueno logre hacerlo con un par de botones. Muchas gracias por tu interes.
ResponderBorrarJorge! Antes que nada, muchas gracias por todo el aporte que haces y por facilitarnos la vida, jeje.
ResponderBorrarTengo una consulta para vos. Es algo parecido a lo que planteaba Vic, salvo que yo necesito que en ciertas celdas (es más bien un rango, desde A1 a M30) NO APAREZCA el objeto flotante, y por supuesto, si en todas las demás.
Se podrá hacer esto?
Desde ya gracias, Gino.
Gino,
ResponderBorrartal como le sugerí a Vic, sólo que en lugar de referirte a una celda te referís a un rango y la condición es que si la celda active NO cae dentro del rango se active la rutina (If Not Union..etc. etc.)
Bueno muchas gracias Jorge!! Ya iré probando como queda...
ResponderBorrarGino.
Que tal estimado autor, interesante la nota. Y me despierta una duda. Podría ser posible a que el cuadro flotante fuera dinámico? Con esto quiero decir que sea posible ajustarlo en tamaño según la cantidad de datos en un rango específico. He intentado acceder a la herramienta cámara con código VBA pero no doy con ella. ¿Alguna sugerencia? Agradezco de antemano su atención al presente. Atte Hugo Jiménez
ResponderBorrarSi. POr ejemplo, en lugar del rango absoluto $A$1:$B$4 al que está ligada la imagen que creamos con la cámara podemos definir un rango dinámico. Para esto creamos un nombre, digamos "rngImagen", que se refiera a, por ejemlo, la fórmula $A$1:INDICE($B$1:$B$10,CONTARA($B$1:$B$10))
ResponderBorrarSeleccionamos la imagen y reemplazamos el rango que aparece en la barra de fórmulas por el nombre.
Ahora la imagen se adaptará a la cantidad de filas que agreguemos o quitemos.
Hola buenas tardes, es posible que el texto flotante aparezca al pasar por encima de una imagen, por ejemplo, tengo un mapa y cada estado del país es una imagen independiente, quisiera que al pasar el cursor por cada estado apareciera el nombre del estado, es posible?
ResponderBorrarNo estoy seguro que se pueda hacer y en caso de ser posible no sería trivial (Vba avanzado). Excel tiene una aplicación Power Maps que te sugiero investigar (dependiendo de que versión de Excel estés usando).
ResponderBorrar