Excel VBA - Navegar en un userform muy grande

Resuelto
TonyLucky -  
 TonyLucky -
Hola a todos,

Estoy trabajando en un juego de carreras de coches. He “dibujado” un circuito en un USF que es más grande que mi pantalla.
Lo que quiero, es hacer que mi USF “se desplace” en función de la posición del coche, para que éste siempre sea visible. He puesto barras de desplazamiento, y logro generar dos desplazamientos de pantalla. Luego, ya no pasa nada.
Altura del USF: 1500. Ancho: 2000
Aquí está el código que utilizo para posicionarme dentro del USF, en función de la posición del coche (definida por la variable i, del label que sirve de casilla de ruta - sí, ya sé, una casilla de selección sería mejor en este caso, y es lo que haré cuando ustedes me hayan ayudado a resolver el presente problema) :

If i = 5 Then Me.ScrollTop = 0 Me.ScrollLeft = 2000 ElseIf i = 9 Then Me.ScrollTop = 2000 Me.ScrollLeft = 2000 ElseIf i = 12 Then ScrollLeft = 5000 Me.ScrollTop = 2000 ElseIf i = 15 Then ScrollLeft = 5000 Me.ScrollTop = 5000 End If


He intentado con diferentes valores de izquierda y superior, sin éxito. Según entiendo, los valores x e y son las posiciones con respecto a la pantalla, lo que podría explicar por qué no sucede nada más allá de esos valores. ¿Cómo hacerlo, entonces?
Admito que no he encontrado nada en la red.
Adjunto mi archivo; por ahora es muy simple y muy ligero.
https://www.cjoint.com/c/KFzjl6qoola


PD: estoy en 64bits

Gracias por adelantado por sus sugerencias
Jean

Configuración: Windows / Firefox 89.0

5 respuestas

  1. cs_Le Pivert Mensajes publicados 8437 Estado Colaborador 730
     
    Bonjour,

    voir ceci:

    https://www.commentcamarche.net/faq/48339-deplacer-avec-la-souris-un-userform-sans-barre-de-fenetre

    --
    @+ Le Pivert
    1
  2. TonyLucky
     
    Hola,
    Gracias por tomarte el tiempo de leerme.
    He probado el código que proponías en mi USF. Funciona con el ratón, pero de forma incompleta, incluso con el ejemplo dado, ya que no se puede "salir" de la pantalla por la parte superior.
    Además, el movimiento del USF debe hacerse automáticamente, en función de la posición del coche.
    Voy a intentar adaptar este código para automatizarlo, pero no estoy seguro de que ese enfoque sea el adecuado.
    Para que conste, en otras aplicaciones tengo USF muy altos en los que puedo subir y bajar sin problema con el ratón o con el cursor de la barra de desplazamiento. Supongo, entonces, que es posible.
    0
  3. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   Embajador 1 588
     
    hola,
    No has probado con valores positivos y altos. Prueba con valores mucho más pequeños.
    ¿Has mostrado, en cada paso, los valores de Me.ScrollTop y Me.ScrollLeft, por ejemplo mediante msgbox?
    Eso te aclarará.
    0
    1. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   1 588
       
      Sugerencia, para probar:
      Private Sub CommandButton1_Click() 'lancer la voiture Debug.Print "scroll " & Me.ScrollHeight & " " & Me.ScrollWidth Debug.Print "Me " & Me.Height & " " & Me.Width; "" If Application.Width < Me.Width Then 'Test si la fenètre Horizontale < le formulaire Me.ScrollWidth = Me.Width 'Taille du scrollbar horizontal Me.Width = Application.Width End If If Application.Height < Me.Height Then 'Test si la fenètre Verticale < le formulaire Me.ScrollHeight = Me.Height 'Taille du scrollbar horizontal Me.Height = Application.Height End If Debug.Print "scroll " & Me.ScrollHeight & " " & Me.ScrollWidth Debug.Print "Me " & Me.Height & " " & Me.Width Dim oldtop As Single, oldleft As Single Me.ScrollLeft = 0 Me.ScrollTop = 0 Do oldtop = Me.ScrollTop Me.ScrollTop = Me.ScrollTop + 1 oldleft = Me.ScrollLeft Me.ScrollLeft = Me.ScrollLeft + 1 DoEvents Loop Until oldtop = Me.ScrollTop And oldleft = Me.ScrollLeft Debug.Print oldtop Debug.Print oldleft End Sub
      0
  4. TonyLucky
     
    Gracias por esa respuesta y por esa pista. He probado muchos valores diferentes, grandes o pequeños, pero siempre me bloqueo en el mismo punto. De hecho, parece que el formulario no sube más allá de cierto valor, igual para el desplazamiento hacia la derecha. La posición máxima indicada por el msgbox es 216, tanto para arriba como para el lateral.
    He probado con todas las posiciones del userform (manual, center, ...).
    Me pregunto si el problema podría venir de la declaración de las barras de desplazamiento del formulario, aunque parece lo que hice en otras apps, excepto que aquí tengo las dos barras (horizontal y vertical).
    Me.Height = 1300: Me.Width = 2000 Me.ScrollHeight = Me.Height + 100: Me.ScrollWidth = Me.Width + 100

    ¿Alguna idea?
    0
  5. TonyLucky
     
    Hola,
    De hecho, como siempre, hay que buscar la simplicidad... ¡sobre todo en informática!
    He encontrado la solución evitando las barras de desplazamiento y posicionando simplemente el USF con me.top y me.left. Funciona a la perfección.
    Gracias a ambos por vuestras sugerencias; me han ayudado en mi progreso.
    Buen fin de semana
    0
    1. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   1 588
       
      ¿Puedes marcar la conversación como resuelta?
      0
      1. TonyLucky > yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención  
         
        Como visitante libre, no tengo acceso a la función resuelta.
        Sin querer abusar, ¿sería tan amable de hacerlo si puede?
        Gracias y buen fin de semana
        0