Excel - imagen sigue la barra de desplazamiento
tom
-
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!
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!
Enlaces relacionados:
- ASCENSOR (barra de desplazamiento) EN EXCEL 2007
- Excel - redimensionar barras de desplazamiento
- ocultar la barra de pestañas de las hojas de Excel
- Ajustar la barra de desplazamiento horizontal
- Ajustar la barra de desplazamiento; caso particular
- Inserción de una barra de desplazamiento en una celda de Excel
4 respuestas
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,
_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,
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 ;-)
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 ;-)
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.
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.
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
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
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?
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?
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).
- 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"
¡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.