Cuadro de texto flotante en Excel - segunda nota

martes, octubre 21, 2008

En la nota anterior sobre cómo crear cuadros de texto flotantes en Excel mostramos una técnica para simular el efecto de un objeto flotante.
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:

20 comments:

OrgPini. 22 octubre, 2008 21:12  

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.

Conoci 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

Jorge L. Dunkelman 22 octubre, 2008 22:18  

Hola Frank

bueno...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.

Anónimo,  29 octubre, 2008 22:48  

Hola mi Nombre es Oscar y quiero felicitarte por tu Blog es EXCEL-ente.

Un 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!!

Jorge L. Dunkelman 29 octubre, 2008 23:13  

Hola Oscar

en 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.

Vic Muñoz 30 enero, 2009 19:29  

Sr. Jorge.

Es 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

Jorge L. Dunkelman 31 enero, 2009 13:55  

Vic
no 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?

Vic Muñoz 02 febrero, 2009 17:15  

Jorge:

Es correcto! solo que la caja flotante se activara solo y cuando nos posicionaramos en las celdas de una columna especifica!

Jorge L. Dunkelman 02 febrero, 2009 21:20  

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

Private 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

Vic Muñoz 03 febrero, 2009 00:16  

Jorge:

Muchas gracias por la ensenanza, mi archivo esta funcionando perfectamente con esta ayuda grafica.

Jaime Muñoz 14 octubre, 2009 16:10  

Buenos dias Sr Jorge, que agradable sorpresa al encontrar su valioso blog, pues es de mucha ayuda para todos.

Quisiera 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.

Jorge L. Dunkelman 14 octubre, 2009 17:54  
Este comentario ha sido eliminado por el autor.
Jorge L. Dunkelman 14 octubre, 2009 17:56  

Jaime
es posible, pero es un tema complicado. Si lees inglés te sugiero consultar esta nota de Chip Pearson.

Jaime Muñoz 15 octubre, 2009 19:05  

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.

Anónimo,  28 enero, 2010 15:22  

Jorge! Antes que nada, muchas gracias por todo el aporte que haces y por facilitarnos la vida, jeje.

Tengo 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.

Jorge L. Dunkelman 28 enero, 2010 21:08  

Gino,
tal 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.)

Anónimo,  02 febrero, 2010 13:29  

Bueno muchas gracias Jorge!! Ya iré probando como queda...

Gino.

Anónimo,  25 agosto, 2011 22:43  

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

Jorge L. Dunkelman 30 agosto, 2011 06:59  

Si. 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))
Seleccionamos 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.

Anónimo,  22 junio, 2016 20:03  

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?

Jorge Dunkelman 23 junio, 2016 07:18  

No 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).

Publicar un comentario

Google+ Followers

Seguidores

Google+ Badge

Términos Legales

  © Blogger template On The Road by Ourblogtemplates.com 2009

Back to TOP