Código vba para autoajustar un userform

Mi pregunta es si existe la posibilidad que mediante código vba en excel pueda autoajustar un formulario y los objetos al tamaño de la pantalla automáticamente tan pronto se despliegue el formulario.
Realmente les agradezco su colobaracion y espero me puedan ayudar la verdad que me urge este código.

1 respuesta

Respuesta
1
Pones este código en el userform:
Private Sub UserForm_Initialize()
Application.WindowState = xlMaximized
Me.Width = Application.Width
Me.Height = Application.Height
End Sub
Pruébalo y me cuentas.
Si te sirvió puntúa y finaliza la consulta. Gracias.
>Un saludo
>Julio
Muchas gracias por contestar!
La verdad que funciono muy bien, pero ahora tengo otra inquietud al momento que despliego el formulario el se autoajusta a la pantalla pero todos los objetos se quedan alineados a la izquierda y me queda una gran parte del formulario vacío, ¿es posible que al momento que se autoajuste el formulario todos los objetos se alineen al centro del formulario? Estoy usando un label para el titulo y 3 frames donde tengo distribuidos diversos objetos y afuera de los frames en el formulario como tal tengo 3 textbox.
Muchas gracias por su respuesta y espero me puedas ayudar! Que tengas un buen día!
Eso no es posible los tamaños de los controles son tal cual los dibujas, si quieres un formulario que ocupe toda la pantalla y que los controles también ocupen toda la pantalla debes de crearlos de ese tamaño.
Una pregunta ¿no estarás haciendo todo esto para que el formulario tape la hoja de Excel y el usuario no pueda ver como se registran los valores en las celdas?
Porque para eso hay un código que no te obliga a hacer tantas cosas.
Aclarame esto y te lo soluciono.
>Un saludo
>Julio
Bueno realmente, lo digo es por que quiero que el proyecto que estoy haciendo parezca más un software que sus formularios oculten todo mientras trabajo, con relación a que no se vea lo que se va registrando lo solucione de la siguiente manera:
Application.ScreenUpdating = False
sheets("hoja que necesito").select
codigo para que se ejecute lo que deseo
sheets("hoja donde tengo el menu").select
Application.ScreenUpdating = true
Pero si tienes otro código diferente me gustaría que me avisaras.
Muchas gracias por su tiempo que tengas un buen día!
Tu estas utilizando un Userform que se debe de cargar al inicio de la apertura del Libro, pues pulsas sobre el Userform doble click (no en los controles dibujados en el userform sino en el propio userform) y te aparecerá el código que tendría,
Private Sub Userform_Click
End Sub
Borras esto y pones:
<div>Private Sub Userform_Initialize()</div>
<div>Application.Visible=False</div>
<div>Userform.Show</div>
<div>End Sub</div>
<div>Con esta instrucción la aplicación de Excel no se mostrará en pantalla, quedando tu Formulario en el centro, de forma flotante para utilizar.</div>
<div></div>
<div>Si encima no quieres que puedan cerrar desde el aspa de la esquina pones tambien este codigo :</div>
<div></div>
<div>Private Sub UserForm_QueryClose(cancel As Integer, CloseMode As Integer)
If CloseMode = 0 Then
MsgBox "USE EL BOTÓN SALIR DEL FORMULARIO", vbInformation, " BOTÓN NO DISPONIBLE"
cancel = 1
CloseMode = 1
End If
End Sub</div>
<div></div>
<div>Evidentemente esto te obliga a poner en tu Userform un boton que tenga como texto SALIR y que tendría este código:</div>
<div></div>
<div>Private CommandButton(el numero que sea)_Click()</div>
<div>If ThisWorkbook.Saved = False Then
    ThisWorkbook.Save
End If
Application.Quit
End Sub</div>
<div></div>
<div>De esta forma se guardan los cambios en el Libro y se cierra Excel</div>
<div></div>
<div>>Un saludo</div>
<div>>Julio</div>
<div></div>
<div>PD: Si necesitas alg más me lo dices</div>
<div></div>
Hola! Muchas gracias por contestar.
La verdad que este código esta de 10 realmente es muy bueno y se ve muy bien el problema es el siguiente:
En una hoja de excel tengo 6 botones los cuales despliegan 6 formularios diferentes, el código que me acabas de dar lo probé en el userform1, a todos los formularios les deshabilite el botón POR con el siguiente código:
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = 0 Then
MsgBox "POR FAVOR USE EL BOTON SALIR QUE ESTA EN EL FORMULARIO", vbInformation, "BOTON NO DISPONIBLE"
Cancel = 1
CloseMode = 1
Else
End If
End Sub
Y a cambio le puse un botón para cerrar el cual permite cerrar el formulario siempre y cuando se cumplan ciertas condiciones de seguridad (para evitar información inconclusa en las hojas) y tiene el siguiente código:
If (CommandButton1.Locked = False) And (CommandButton2.Locked = True) And (CommandButton3.Locked = True) Then
Unload Me
Else
If (CommandButton1.Locked = True) And (CommandButton2.Locked = True) And (CommandButton3.Locked = True) Then
Unload Me
Else
MsgBox "ERROR,POR FAVOR COMPLETE TODA LA INFORMACION Y GUARDE EL REGISTRO", vbCritical + vbOKOnly, "REGISTRO INCOMPLETO"
End If
End If
End Sub
Al agregar el código que me diste me funciona el inconveniente es que cuando quiero volver a excel no me muestra la aplicación entonces decidí ponerle este código al botón salir
Application.Visible = True 
Antes del código unload me para que me muestre excel y me descargue el formulario pero me arroja un error que dice se ha producido el error "91" entiempo de ejecución variable de obeto o bloque with no establecido y me muestra el código que se encuentra en el botón que despliega el userform1 el cual esta en una hoja de excel y tiene el siguiente código:
UserForm1. Show
tambien lo probe despues del unload me y me genera el mismo error.... que solucion se le puede dar para que me deje ver excel y pueda utilizar los otros userform?
Agradezco su colaboración y disculpa tanta molestia
que tengas un feliz día!
Vamos a ver el código que te envié es para un Userform solamente, por ello solo aparece Userform1. Show una vez, pero cuando estes en el userform1 debes de engancharle a los siguientes userform para que te los muestre, primero ocultas el 1º y después muestras el 2º y así sucesivamente:
Userform1. Hide
Userform2.Show
Esto como lineas de código en el botón que quieras del userform1 y luego debes de hacer lo mismo en el segundo para que te muestre el 3º etc. Al final debes de poner en el botón salir que estaría solo en último userform que cierre Excel y guarde los cambios. No sé si me he explicado, esto te servirá para ir recorriendo todos los formularios, pero debes de pensar que problemas puede dar si el usuario no puede o no quiere continuar deberás de darle la posibilidad de abandonar con la advertencia de que no ha rellenado todos los datos y que no se guardará nada de lo que ha hecho si esa es tu intención.
Si necesitas alguna aclaración me lo dices.
>Un saludo
>Julio
Muchas gracias! La verdad ese código esta de 10 me sirvió demasiado y visualmente hace más de lo que yo quería, de verdad que te lo agradezco...
Antes de finalizar la consulta quisiera saber si me puedes ayudar con un código que tengo, realmente es un poco complicado, de pronto a ud también le sirva, es un código que genera una barra de progreso mientras se ejecuta una macro, ya lo tengo quisiera que me dieras algún correo para hacértelo llegar para que lo revises a ver si me puedes ayudar para implementarlo a mi sistema. Quedo a la espera de tu respuesta...
Muchas gracias por la colaboración y la paciencia, que tengas un buen día!
Las barras de progreso o progressbar consumen muchos recursos ralentizan el sistema y vuelven muy lento la ejecución de código, conozco perfectamente el código y nunca lo utilizo, prefiero lanzar un mensaje de que la macro se está ejecutando y que cuando termine le informaré con otro msgbox. Además hay que calcular la duración de macro para implementar la velocidad a la que tiene que correr el progressbar, y eso solo se puede hacer repitiendo la ejecución de la macro calculando el tiempo y probando para adaptarlo a la duración del código, te podría dar que si está mal calculado el progreso de la barra termine antes de la ejecución o al revés y queda hecho una pena.
Finaliza la consulta, y puntualá si crees que lo merece.
>Un saludo
>Julio
Ok men, entiendo por que lo estuve revisando y si es un poco lento, igual yo tengo mi aplicación con mensajes de inicio y terminación de macro solo quería saber como implementar lo de la barra de progreso.
Muchas gracias por su colaboración, de verdad que eres muy amable en ayudarme la verdad que se te recompense de la mejor manera por la ayuda que brindas!
Tal vez más adelante tenga dudas con algunas macros espero que me puedas ayudar!
Que estés bien y un feliz día!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas