es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Autoscale cells excel vba – Escalar automáticamente celdas en Excel VBA

Estoy intentando escalar automáticamente mi tabla para que se ajuste siempre al tamaño de la ventana. Estoy intentando obtener el ancho de la ventana de Excel. Quiero obtener alguna diferencia de algún tipo cuando cambias el tamaño de la aplicación de Excel. Luego intento guardarlo en la variable “w” y compararlo con la última vez que se cambió el tamaño de la ventana “w_old”. Y el problema es que no estoy seguro de si estoy mirando en el lugar correcto cuando miro Application.Width porque cada vez que ejecuto el script, se ejecuta la declaración if incluso si no he cambiado el tamaño de mi ventana de Excel.

Dim w As Long
Dim w_old As Long
w = Application.Width

If (w <> w_old) Then
    Columns("A:K").Select
    ActiveWindow.Zoom = True
    Range("A1").Select
    w_old = w
End If

¡Gracias de antemano!

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está en el método utilizado para recuperar el ancho de la ventana de Excel. En lugar de utilizar Application.Width, prueba utilizando Application.Width / Application.Zoom. Esto te dará el ancho real de la ventana, independientemente del nivel de zoom. Además, asegúrate de inicializar w_old antes de ejecutar la sentencia if, de lo contrario siempre entrará en la sentencia if en la primera ejecución. El código actualizado se vería así:

       Dim w As Long
       Dim w_old As Long
    
       w = Application.Width / Application.Zoom
    
       If w_old <> 0 And w <> w_old Then
          Columns("A:K").Select
          ActiveWindow.Zoom = True
          Range("A1").Select
       End If
    
       w_old = w
    

    Esto debería comparar correctamente el ancho actual de la ventana de Excel con el ancho anterior, y solo entrar en la sentencia if si los dos valores son diferentes.

Comments are closed.