los Formulario de reserva de cursos es un formulario simple que ilustra los principios del diseño de UserForm y la codificación VBA asociada.
Utiliza una selección de controles que incluyen cuadros de texto, cuadros combinados, botones de opción agrupados en un marco, casillas de verificación y botones de comando.
Cuando el usuario hace clic en el botón Aceptar, su entrada se ingresa en la siguiente fila disponible en la hoja de trabajo.
Descripción del formulario de Excel:
Hay dos cuadros de texto simples (Nombre: y Teléfono:) en el que el usuario puede escribir texto libre y dos cuadros combinados (Departamento y Curso) que permiten al usuario elegir un elemento de la lista.
Hay tres botones de opción (Introducción, Intermedio y Avanzado) agrupados en un marco (Nivel) para que el usuario pueda elegir solo una de las opciones.
Hay dos casillas de verificación (Almuerzo requerido y Vegetariano) que, debido a que no están agrupados en un marco, se pueden elegir ambos si es necesario. Sin embargo, si la persona que realiza la reserva no quiere almorzar, no es necesario que sepamos si es vegetariano o no. Entonces el Vegetariano La casilla de verificación está atenuada hasta que se solicite.
Hay tres botones de comando (OK, Cancelar y Forma clara) cada uno de los cuales realiza una función predefinida cuando se hace clic en él.
La configuración de las propiedades de control:
Control | Escribe | Propiedad | Configuración |
Formulario de usuario | Formulario de usuario | Nombre | frmCourseBooking |
Subtítulo | Formulario de reserva de cursos | ||
Nombre | Caja de texto | Nombre | txtName |
Teléfono | Caja de texto | Nombre | txtPhone |
Departamento | Caja combo | Nombre | cboDepartment |
Curso | Caja combo | Nombre | cboCourse |
Nivel | Cuadro | Nombre | fraLevel |
Subtítulo | Nivel | ||
Introducción | Botón de opción | Nombre | optIntroduction |
Intermedio | Botón de opción | Nombre | optIntermediate |
Avanzado | Botón de opción | Nombre | optAdvanced |
Almuerzo requerido | Casilla de verificación | Nombre | chkLunch |
Vegetariano | Casilla de verificación | Nombre | chkVegetarianos |
Activado | Falso | ||
OK | Botón de comando | Nombre | cmdOk |
Subtítulo | OK | ||
Defecto | Cierto | ||
Cancelar | Botón de comando | Nombre | cmdCancel |
Subtítulo | Cancelar | ||
Cancelar | Cierto | ||
Forma clara | Botón de comando | Nombre | cmdClearForm |
Crear formularios en Excel
Si desea crear el formulario usted mismo, simplemente copie el diseño que se muestra en la ilustración anterior. Siga los pasos a continuación:
1. Abra el libro de trabajo al que desea que pertenezca el formulario (los formularios de usuario, como las macros, deben adjuntarse a un libro de trabajo) y cambie al Editor de Visual Basic.
2. En el Editor de Visual Basic, haga clic en el Insertar formulario de usuario botón (o ir a Insertar> UserForm).
3. Si la caja de herramientas no aparece por sí sola (primero haga clic en el formulario para asegurarse de que no se oculta), haga clic en el Caja de herramientas botón (o ir a Ver> Caja de herramientas).
4. Para colocar un control en el formulario, haga clic en el botón correspondiente en la caja de herramientas y luego haga clic en el formulario. Los controles se pueden mover arrastrándolos por sus bordes o cambiar de tamaño arrastrando los botones alrededor de su perímetro.
5. Para editar las propiedades de un control, asegúrese de que el control elegido esté seleccionado y luego realice los cambios apropiados en el Propiedades ventana. Si no puede ver la ventana de propiedades, vaya a Ver> Ventana Propiedades.
6. Para eliminar un control del formulario, selecciónelo y haga clic en el Borrar tecla en su teclado.
Un UserForm en realidad no hará nada hasta que se cree el código que impulsa el formulario y sus diversos controles. El siguiente paso es escribir el código que impulsa el formulario en sí.
Adición del código: 1 Inicialización del formulario
Inicializando el formulario:
La mayoría de los formularios necesitan algún tipo de configuración cuando se abren. Esto puede ser establecer valores predeterminados, asegurarse de que los campos estén vacíos o crear listas de cuadros combinados. Este proceso se llama Inicializando el formulario y se encarga de una macro llamada UserForm_Initialize (en caso de que esté confundido por mi variante ortografía de la palabra "initialis (z) e", es porque hablo inglés y VBA habla americano, pero no se preocupe, VBA lo hará deletree para usted!). A continuación, se explica cómo crear el código para inicializar el formulario de reserva de cursos:
1. Para ver la ventana de código del formulario, vaya a Ver> Código o haga clic en F7.
2. Cuando la ventana de código se abre por primera vez, contiene un UserForm_Click () procedimiento. Utilice las listas desplegables en la parte superior de la ventana de código para elegir Formulario de usuario y Inicializar. Esto creará el procedimiento que necesita. Ahora puede eliminar el procedimiento UserForm_Click ().
3. Ingrese el siguiente código en el procedimiento:
Private Sub UserForm_Initialize () txtName.Value = "" txtPhone.Value = "" Con cboDepartment .AddItem "Ventas" .AddItem "Marketing" .AddItem "Administración" .AddItem "Diseño" .AddItem "Publicidad" .AddItem "Despacho". AddItem "Transporte" Termina con cboDepartment.Value = "" Con cboCourse .AddItem "Access" .AddItem "Excel" .AddItem "PowerPoint" .AddItem "Word" .AddItem "FrontPage" Termina con cboCourse.Value = "" optIntroduction = True chkLunch = False chkVegetarian = False txtName.SetFocus End Sub
Cómo funciona el código de inicialización:
El propósito del procedimiento UserForm_Initialize () es preparar el formulario de usuario en VBA para su uso, estableciendo los valores predeterminados para los diversos controles y creando las listas que mostrarán los cuadros combinados.
Estas líneas establecen el contenido de los dos cuadros de texto en vacío:
txtName.Value = "" txtPhone.Value = ""
Luego vienen las instrucciones para los cuadros combinados. En primer lugar, se especifica el contenido de la lista, luego el valor inicial del cuadro combinado se establece en vacío.
Con cboDepartment .AddItem "Sales" .AddItem "Marketing" (tantos como sea necesario …) Termine con
cboDepartment.Value = ""
Si es necesario, se puede realizar una elección inicial del grupo de opciones, en este caso:
optIntroduction = Verdadero
Ambas casillas de verificación están configuradas como Falso (es decir, sin marcar). Establezca en Verdadero si desea que la casilla de verificación aparezca ya marcada:
chkLunch = Falso
chkVegetarian = Falso
Finalmente, el foco se lleva al primer cuadro de texto. Esto coloca el cursor de los usuarios en el cuadro de texto para que no tengan que hacer clic en el cuadro antes de comenzar a escribir:
txtName.SetFocus
Agregar el código: 2 Hacer que los botones funcionen
Hay tres botones de comando en el formulario y cada uno debe funcionar con su propio procedimiento. Empezando por los sencillos …
Codificación del botón Cancelar:
Anteriormente, usamos la ventana Propiedades para configurar el Cancelar propiedad del botón Cancelar para Cierto. Cuando establece la propiedad Cancelar de un botón de comando en Verdadero, esto tiene el efecto de "hacer clic" en ese botón cuando el usuario presiona el botón Esc tecla en su teclado. Pero esto por sí solo no hará que le suceda nada al formulario. Debe crear el código para el evento de clic del botón que, en este caso, cerrará el formulario. Así es cómo:
1. Con el UserForm abierto para editarlo en el Editor de Visual Basic, haga doble clic en el botón Cancelar. La ventana de código del formulario se abre con el cmdCancel_Click () procedimiento listo para editar.
2. El código para cerrar un formulario es muy simple. Agregue una línea de código al procedimiento para que se vea así:
Sub privado cmdCancel_Click () Descargarme End Sub
Codificación del botón Borrar formulario:
Agregué un botón para borrar el formulario en caso de que el usuario quisiera cambiar de opinión y restablecer todo, y para que fuera más fácil si tenía que hacer varias reservas a la vez. Todo lo que tiene que hacer es ejecutar de nuevo el procedimiento de inicialización. Se puede decirle a una macro que ejecute otra macro (o una serie de macros si es necesario) usando el Llama palabra clave:
1. Haga doble clic en el botón Borrar formulario. La ventana de código del formulario se abre con el cmdClearForm_Click () procedimiento listo para editar.
2. Agregue una línea de código al procedimiento para que se vea así:
Sub privado cmdClearForm_Click () Llamar UserForm_Initialize End Sub
Codificación del botón OK:
Este es el fragmento de código que tiene que hacer el trabajo de transferir las opciones del usuario y la entrada de texto a la hoja de trabajo. Cuando configuramos la propiedad Cancelar del botón Cancelar en Verdadero, también configuramos la propiedad del botón Aceptar Defecto propiedad a Cierto. Esto tiene que hacer clic en el botón Aceptar cuando el usuario presiona el Ingresar (o Regreso) en su teclado (siempre que no hayan utilizado su Pestaña tecla para pasar a otro botón). Aquí está el código para que funcione el botón:
1. Haga doble clic en el botón Aceptar. La ventana de código del formulario se abre con el cmdOK_Click () procedimiento listo para editar.
2. Edite el procedimiento para agregar el siguiente código:
Private Sub cmdOK_Click () ActiveWorkbook.Sheets ("Reservas de cursos"). Active Range ("A1"). Seleccione Do If IsEmpty (ActiveCell) = FalseThen ActiveCell.Offset (1, 0) .Select End If Loop until IsEmpty (ActiveCell) = True ActiveCell.Value = txtName.Value ActiveCell.Offset (0, 1) = txtPhone.Value ActiveCell.Offset (0, 2) = cboDepartment.Value ActiveCell.Offset (0, 3) = cboCourse.Value Si optIntroduction = True Entonces ActiveCell.Offset (0, 4) .Value = "Intro" ElseIf optIntermediate = True Entonces ActiveCell.Offset (0, 4) .Value = "Intermed" Else ActiveCell.Offset (0, 4) .Value = "Adv" End If Si chkLunch = True Entonces ActiveCell.Offset (0, 5) .Value = "Yes" Else ActiveCell.Offset (0, 5) .Value = "No" End If If chkVegetarian = True Entonces ActiveCell.Offset (0, 6). Valor = "Sí" Else If chkLunch = False Entonces ActiveCell.Offset (0, 6) .Value = "" Else ActiveCell.Offset (0, 6) .Value = "No" End If End If Range ("A1"). Seleccione End Sub
Cómo funciona el código CmdOK_Click:
Las dos primeras líneas aseguran que el libro de trabajo correcto esté activo y mueve la selección a la celda A1:
ActiveWorkbook.Sheets ("Reservas de cursos"). Active Range ("A1"). Seleccione Las siguientes líneas mueven la selección hacia abajo en la hoja de trabajo hasta que encuentra una celda vacía: Do If IsEmpty (ActiveCell) = False Then ActiveCell.Offset (1 , 0) .Seleccione Finalizar si el bucle hasta que esté vacío (ActiveCell) = Verdadero
Las siguientes cuatro líneas comienzan a escribir el contenido del formulario en la hoja de trabajo, usando la celda activa (que está en la columna A) como referencia y moviéndose a lo largo de la fila una celda a la vez:
ActiveCell.Value = txtName.Value ActiveCell.Offset (0, 1) = txtPhone.Value ActiveCell.Offset (0, 2) = cboDepartment.Value ActiveCell.Offset (0, 3) = cboCourse.Value
Ahora llegamos a los botones de opción. Estos se han colocado en un marco en el formulario para que el usuario pueda elegir solo uno. Se utiliza una instrucción IF para indicarle a Excel qué hacer para cada opción:
Si optIntroduction = True Entonces ActiveCell.Offset (0, 4) .Value = "Intro" ElseIf optIntermediate = True Entonces ActiveCell.Offset (0, 4) .Value = "Intermed" Else ActiveCell.Offset (0, 4) .Value = "Adv" Fin si
Las declaraciones IF de VBA son mucho más fáciles de administrar que la función IF de Excel. Puede tener tantas opciones como desee, simplemente inserte un De lo contrario para cada uno. Si solo hubiera dos opciones, no necesitaría el De lo contrario, solo el Si y Demás sería suficiente (no lo olvides, todos necesitan un Terminara si).
Hay otra instrucción IF para cada casilla de verificación. Para la casilla de verificación Se requiere almuerzo, una marca en la casilla significa "Sí", la persona requiere el almuerzo, y si no hay una marca significa "No", no lo hace.
Si chkLunch = True Entonces ActiveCell.Offset (0, 5) .Value = "Yes" Else ActiveCell.Offset (0, 5) .Value = "No" End If
Podríamos usar una declaración IF similar para la casilla de verificación Vegetariana, pero si la persona no requiere el almuerzo, es irrelevante si es vegetariana o no. En cualquier caso, sería un error suponer que no eran vegetarianos simplemente porque no necesitaban el almuerzo. Por lo tanto, la instrucción IF contiene una segunda instrucción if anidada:
Si chkVegetarian = True Entonces ActiveCell.Offset (0, 6) .Value = "Sí" Else Si chkLunch = False Entonces ActiveCell.Offset (0, 6) .Value = "" Else ActiveCell.Offset (0, 6) .Value = "No" End If End If
Una marca en la casilla significa "Sí", la persona es vegetariana. Si no hay ninguna marca en la casilla, la instrucción IF anidada busca en la casilla de verificación Se requiere almuerzo. Si la casilla de verificación Se requiere almuerzo tiene una marca, entonces la ausencia de una marca en la casilla de verificación Vegetariano significa que la persona no es vegetariana, por lo que inserta "No" en la celda. Sin embargo, si la casilla de verificación Se requiere almuerzo no tiene una marca, entonces no sabemos si la persona es vegetariana (no importa de todos modos) por lo que la celda se deja en blanco ("").
Finalmente, la selección se devuelve al comienzo de la hoja de trabajo, lista para la siguiente entrada:
Rango ("A1"). Seleccionar
Agregar el código 3: manipular el formulario
Finalmente, un ejemplo de cómo se pueden manipular los controles de un formulario mientras está en uso. Cuando se establecieron las propiedades de control, Activado propiedad de la casilla de verificación Vegetariana se estableció en Falso. Cuando un control no está habilitado, usuario no puede ingresar un valor en él, aunque puede contener un valor que ya estaba allí, y VBA puede agregar, eliminar o cambiar el valor.
No necesitamos saber si la persona es vegetariana (¡incluso si lo es!) Si no está pidiendo el almuerzo. Por lo tanto, la casilla de verificación Vegetariana permanece deshabilitada a menos que se coloque una marca en la casilla de verificación Se requiere almuerzo. Entonces el usuario es libre de marcar la casilla de verificación Vegetariano si así lo desea. Si la marcan, sabremos que han respondido "Sí" y si no, sabremos que han respondido "No".
Podemos alternar el Activado propiedad de Falso para Cierto teniendo un procedimiento que se ejecuta automáticamente cada vez que cambia el valor de la casilla de verificación Almuerzo requerido. Afortunadamente, más controles tienen una Cambio procedimiento y el que usamos aquí es chkLunch_Change (). Usaremos esto para habilitar la casilla de verificación Vegetariano cuando la casilla de verificación de Almuerzo Requerido esté marcada, y la desactivaremos cuando la casilla de verificación de Almuerzo Requerido no esté marcada.
Solo hay una cosa más que debemos hacer. Supongamos que alguien marcó la casilla de verificación Almuerzo requerido y también marcó la casilla Vegetariana. Luego cambiaron de opinión y quitaron la marca de la casilla de verificación Se requiere almuerzo. La casilla de verificación Vegetariana estaría desactivada, pero la marca que se colocó anteriormente permanecería.
Una línea adicional de código puede garantizar que la marca se elimine cuando la casilla está desactivada. Aquí está todo el asunto:
Private Sub chkLunch_Change () Si chkLunch = True Entonces chkVegetarian.Enabled = True Else chkVegetarian.Enabled = False chkVegetarian = False End If End Sub
Abriendo el formulario
El formulario ya está listo para su uso, por lo que debe abrirse con una macro simple. Eso se puede adjuntar a un botón de barra de herramientas personalizado, un botón de comando dibujado en la hoja de trabajo o cualquier gráfico (haga clic con el botón derecho en el gráfico y elija Asignar macro). Si es necesario, cree un nuevo módulo para el libro de trabajo y agregue este procedimiento:
Sub OpenCourseBookingForm () frmCourseBooking.Show End Sub
Si te gustaron nuestros blogs, compártelo con tus amigos en Facebook. Y también puedes seguirnos en Twitter y Facebook.
Nos encantaría saber de usted, háganos saber cómo podemos mejorar, complementar o innovar nuestro trabajo y hacerlo mejor para usted. Escríbanos al sitio de correo electrónico