Excel - imagen sigue la barra de desplazamiento

tom -  
 tom -
Hola,
Me explico, estoy haciendo un programa utilizando VBA.
En una hoja de Excel he insertado imágenes y les he asignado una macro a cada una.
Así que quiero que el usuario ejecute las macros a través de esas imágenes que sirven como botones en la hoja de cálculo.
Sin embargo, hay un problema, si el usuario desplaza su hoja de Excel (yendo a la derecha o hacia abajo, por ejemplo), las imágenes permanecen fijas en la hoja de cálculo, es decir, se mueven a los ojos del usuario. Sin embargo, me gustaría que estuviesen fijas en la pantalla de la computadora, es decir, que no se muevan a los ojos del usuario.

¡Gracias a quienes entiendan mi problema!

4 respuestas

commentcamarcheeay Mensajes publicados 735 Estado Miembro 86
 
Podría recomendarte la siguiente macro:

_Sub resizePic()
____Dim rngCanSee As Range
____Set ecran = ActiveWindow.VisibleRange
____With ActiveSheet.Pictures(1)
_______' Aquí puedes definir la posición deseada.
_______' Puedes usar ecran.VisibleRange.Left y ecran.VisibleRange.Top
_______.Left = ecran.Left + 20
_______.Top = ecran.Top + 20
____End With
_End Sub


Esta macro reposiciona la imagen en el lugar deseado cada vez que se selecciona una nueva ventana si la llamas en este evento:

_Private Sub Worksheet_SelectionChange(ByVal Target As Range)
____Call resizePic
_End Sub


Sin embargo, no se reposiciona si se desplazan las barras de desplazamiento con el ratón hasta después de hacer clic en la pantalla.

Yassine,
1
tom
 
Entonces he probado tu resizePic, funciona bien. Gracias, ¡eso ya es algo!
Sin embargo, no veo mucho sentido en el sub privado...
Debería haber uno que lance resizePic en cuanto el usuario desplace su hoja de Excel (por ejemplo, cada vez que baje más en la hoja).
0
commentcamarcheeay Mensajes publicados 735 Estado Miembro 86
 
El "Private Sub Worksheet_SelectionChange(ByVal Target As Range)" es el evento que ejecuta resizePic. Es el evento asociado al cambio de selección de una nueva celda.
- se puede poner la macro resizePic en un módulo (por ejemplo, Módulo1)
- el "private sub", en cambio, se crea automáticamente cuando vamos al código de la hoja 1 ("Hoja1") y cambiamos el valor del ComboBox (en la parte superior izquierda) de "General" a "Worksheet"
0
tom
 
Ah sí, soy un idiota, lo había puesto con mis módulos el private sub.
¡Funciona bien! ¡Buen trabajo, hay que conocer la sintaxis!
Sin embargo, efectivamente, si movemos los scrolls con el ratón, ya no funciona.
¡Pero ya está bastante bien así! Gracias.
0
commentcamarcheeay Mensajes publicados 735 Estado Miembro 86
 
Hola,

Tenemos la posibilidad de posicionarnos con respecto al fondo de la página y tener en cuenta el redimensionamiento. Solo es necesario saber cómo deben reposicionarse los comandos cuando se cambia de tamaño.

Lo siguiente es un ejemplo que permite posicionar una forma a 20p del fondo y en el medio de la pantalla:

.... Sub resizePic()
........ Set pantalla = ActiveWindow.VisibleRange
........ With ActiveSheet.Shapes(1)
............ .Left = pantalla.Left + pantalla.Width / 2 - .Width / 2
............ .Top = pantalla.Top + pantalla.Height - .Height - 20
........ End With
..... End Sub


No voy a comentar la macro, creo que es bastante clara.
En general, se posicionan los botones en la parte inferior izquierda. Así que incluso si la pantalla está reducida, siempre se pueden colocar las imágenes a la izquierda.

Por otro lado, se pueden utilizar macros para redimensionar las ventanas. Aquí hay un ejemplo:

Sub resizeWin()
.... Set pantalla = ActiveWindow.VisibleRange
.... With ActiveSheet.Shapes(1)
........ If ActiveWindow.WindowState = xlNormal Then
............ If pantalla.Width < .Width Then ActiveWindow.Width = ActiveWindow.Width - pantalla.Width + .Width
............ If pantalla.Height < .Width Then ActiveWindow.Height = ActiveWindow.Height - pantalla.Height + .Height
........ End If
.... End With
End Sub


Que pones en el evento:

Private Sub Workbook_WindowResize(ByVal Wn As Window)
.... resizeWin
End Sub


Creo que puedes entregar el ejercicio a tu profe ;-)
1
commentcamarcheeay Mensajes publicados 735 Estado Miembro 86
 
Ten cuidado, hay worksheet y workbook. No cometas errores de lectura.
Los códigos siguen estando por adaptar para posicionar bien los elementos.
Comentario. Esta vez he puesto una forma automática en lugar de una imagen. Si utilizas una imagen, reemplaza shape por picture como en el ejemplo anterior.
0
tom
 
¡Gracias, funciona de maravilla!
¡Bien hecho con el ecran.Height - .Height!
Me salva ^^
¡Buen fin de semana!
0
commentcamarcheeay Mensajes publicados 735 Estado Miembro 86
 
Hola,

Intenta dividir la ventana. Esto la dividirá en varias ventanas, de las cuales una será deslizable (donde se ubicarán los botones de fotos). Luego, presiona el botón de fijar.

Es una forma de hacerlo que, personalmente, no me satisface porque limita la visualización. Pero puede ayudar en este asunto.

Buena continuación,
Yassine
0
tom
 
Ya he probado eso... es regular... ¡ocupa una buena parte de la pantalla!
¡Gracias de todos modos!
0
tom
 
Buenas noches,
Después de muchas pruebas, llegué a una conclusión:
Quiero colocar mis imágenes en la parte inferior de la página mediante la macro.
El problema es que, según la dimensión de la pantalla del ordenador o el zoom en Excel, la macro anterior no siempre coloca las imágenes en la parte inferior.
En mi pc están en la parte inferior, en otro ni siquiera se ven porque están demasiado abajo...
no es práctico para entregar el proyecto a mi profesor... no le voy a preguntar por el tamaño de su pantalla.

ActiveWindow.VisibleRange.Bottom ¡no funciona! ¿Qué debo hacer entonces?
0