Formulario de usuario para ingreso de datos

En esta ocasión, y luego de haber visto el uso de los principales botones como son el de comando (Command Bx), cuadro de texto (TextBoox), cuadro combinado (ComboBox) y el cuadro de lista (ListBox), veremos ahora el uso de los botones de Opción (Option Button) y el de casilla (Check Box).

Como todos estos botones son necesarios en un formulario de ingreso de datos personales, diseñaremos un formulario de ingreso de datos y programaremos cada uno de los botones.

Los botones de cuadro de texto, cuadro combinado y cuadro de lista necesitan una etiqueta, en el caso de los botones de opciones y las casillas no son necesarias pues, al usarse por lo general en grupo, podemos colocarlas dentro de un botón de Marco (Frame).

De manera que, los botones que vamos a insertar en el formulario, se encuentran en la siguiente lista, los que describen a los que aparecen en la imagen que hemos insertado al final de esta sección.

1. Formulario: FrmDatos, Caption: Formulario de ingreso de datos
2. Cuadro de texto: TxtApat, por encima de ella, una etiqueta, su Caption: Ap. Paterno
3. Cuadro de texto: TxtAmat, por encima de ella, una etiqueta, su Caption: Ap. materno
4. Cuadro de texto: TxtNom, por encima de ella, una etiqueta, su Caption: Nombres
5. Un marco (Frame): FraNac, su Caption: Fecha de nacimiento

Dentro del marco:

6. Cuadro combinado: CboDia
7. Cuadro combinado: CboMes
8. Cuadro combinado: CboAnio
9. A la derecha de este marco: Un cuadro de texto: TxtDirec, por encima: Una etiqueta con Caption: Dirección donde vive.
10. A la derecha del botón anterior: Un marco (Frame): FraSex, su Caption: Sexo

Dentro de este marco:

11. Botón de opción: OpcM, su Caption: Masculino (se debe extender a la derecha para el texto)
12. Botón de opción: OpcF, su Caption: Femenino

Debajo de todo:

13. Cuadro de texto: TxtDist, por encima de ella, una etiqueta, su Caption: Distrito
14. Cuadro de texto: TxtProv, por encima de ella, una etiqueta, su Caption: Provincia
15. Cuadro de texto: TxtReg, por encima de ella, una etiqueta, su Caption: Región (Dpto)
16. Por debajo de ellos (5 líneas más abajo), un cuadro combinado: CboGrdoInst. Por encima de él: una etiqueta, su Caption: Último grdo de instuc.
17. A la derecha, un marco (Frame): FraDeporte, su Caption: Deporte favorito

Dentro del marco:

18. Una casilla: Chk01, su Caption: Fútbol
19. Una casilla: Chk02, su Caption: Voley
20. Una casilla: Chk03, su Caption: Natación
21. Una casilla: Chk04, su Caption: Box
22. Una casilla: Chk05, su Caption: Ciclismo

Cinco líneas más abajo:

23. Un botón de comando: CmdGrabar, su Caption: Grabar
24. Un botón de comando: CmdNuevo, su Caption: Nuevo
25. Un botón de comando: CmdFin, su Caption: Salir

Los datos que se ingresarán a la hoja Datos de este archivo (MisFormularios05.xlsm), por lo que debemos activarlo en el momento que se realiza la inicialización del formulario.

Antes de programar el formulario, adecúe la hoja Datos de forma que cuando se transfiera datos del formulario, se graben en columnas de amplitud adecuada.

Del mismo modo, guardaremos el número de la primera fila disponible, en la celda Z1. En la primera grabación, este valor debe ser 4.

La programación de este formulario es simple: Todos los datos van a ser ingresados por teclado o se seleccionarán haciendo clic en las opciones respectivas.

Primero veamos lo que se debe realizar al ejecutarse el formulario:

- Cargar a un arreglo (TMes()) los nombres de los meses
- Cargar los cuadros combinados de Dia, Mes, Año así como el de Grdo de intrucción.

Para ello, hacemos doble clic en el interior del formulario. Con esto logramos insertar el procedimiento UserForm_Clic; pero este no nos sirve (Se puede usar, pero para que se ejecute su contenido necesita que hagamos clic en el formulario cuando se está ejecutando).

Usaremos el Initialize. Para ello, despliegue la lista del cuadro combinado extenso que está por encima del espacio de código. Haga clic en Initialize. Y dentro de este procedimiento digitaremos el código que se debe ejecutar, de manera que dicho procedimiento debe quedar como sigue:

Private Sub UserForm_Initialize()

' Definición de una cadena de caracteres del mismo tamaño (9)
Mes = "Enero Febrero Marzo Abril Mayo Junio Julio Agosto SetiembreOctubre NoviembreDiciembre"
'
' Extracción de 9 caracteres cada vez para formar una tabla de meses
For i = 1 To 12
TMes(i) = Mid(Mes, 9 * (i - 1) + 1, 9)
Next
'
' Creación de los nros de días del mes
For i = 1 To 31
CboDia.AddItem i
Next
'
' Adición de los meses al cuadro combinado de mes
For i = 1 To 12
CboMes.AddItem TMes(i)
Next
'
' Creación del cuadro combinado de los años desde 1930
For i = 1930 To Year(Date)
CboAnio.AddItem i
Next
'
' Adición de grados de instrucción al cuadro combinado
CboGrdoInst.AddItem "Analfabeto"
CboGrdoInst.AddItem "Primaria"
CboGrdoInst.AddItem "Secundaria"
CboGrdoInst.AddItem "Bachiller"
CboGrdoInst.AddItem "Titulado"
CboGrdoInst.AddItem "Maestría"
CboGrdoInst.AddItem "Doctorado"
'
Workbooks("MisFormularios05.xlsm").Activate
Sheets("Datos").Select
TxtApat.SetFocus
End Sub
 

Los comentarios insertados nos relevan de mayores comentarios. Sólo debe observarse que, como se va a usar un arreglo (TMes()) , se le debe declarar por encima de todo procedimiento usando:

DIM TMes(12) As String
Doble clic ahora en el botón [Salir]
Digite la interior: End

Luego de rellenar el formulario, se debe grabar en la hoja Datos, para lo cual se debe hacer clic en el botón [Grabar].

Si se desea ingresar nuevos datos, se debe limpiar todos los cuadros de texto y desactivar las opciones o casillas utilizadas. Esto se realizará haciendo clic en el botón [Nuevo].

Empecemos a codificar estos botones:

Botón [Grabar]. Haga doble clic en este botón.

Al ejecutarse el formulario, se debe rellenar todos los datos según corresponda.

Puesto que al inicializar el formulario ya se activó el libro y se seleccionó la hoja Datos, ahora sólo queda transferir el contenido de cada uno de los objetos del formulario a la fila que está libre. Por ello, ante todo, se la celda Z1 cargamos a una variable Ix (Ix = Range(“Z1”) el número de la fila disponible; en la primera vez esta celda contendrá el número 4.

Luego de transferir todos los datos, se debe incrementar esta variable en uno (Ix = Ix+1) y depositarlo en la celda Z1 (Range(“Z1”) = Ix).

Cuando se hace clic en algún botón botón de opción, éste activa su valor en VERDADERO, de otra manera dicho valor es FALSO. Lo mismo ocurre con los botones de casilla (CheckBox). Su estado se puede saber consultando con Obj.VALUE (OpcM.Value o Chk01.Value).

Private Sub CmdGrabar_Click()

Deport = "Fútbol Voley NataciónTenis Ciclismo"
Ix = Range("Z1")
Cells(Ix, 1) = TxtApat.Text
Cells(Ix, 2) = TxtAmat.Text
Cells(Ix, 3) = TxtNom.Text
Cells(Ix, 4) = CboDia.List(CboDia.ListIndex)
Cells(Ix, 5) = CboMes.List(CboMes.ListIndex)
Cells(Ix, 6) = CboAnio.List(CboAnio.ListIndex)
Cells(Ix, 7) = TxtDirec.Text
Cells(Ix, 8) = TxtDist.Text
Cells(Ix, 9) = TxtProv.Text
Cells(Ix, 10) = TxtReg.Text
Cells(Ix, 11) = CboGrdoInst.List(CboGrdoInst.ListIndex)
If OpcM.Value Then
Cells(Ix, 12) = "M"
Else
Cells(Ix, 12) = "F"
End If
If Chk01.Value Then Cells(Ix, 13) = Mid(Deport, 1, 8)
If Chk02.Value Then Cells(Ix, 14) = Mid(Deport, 9, 8)
If Chk03.Value Then Cells(Ix, 15) = Mid(Deport, 17, 8)
If Chk04.Value Then Cells(Ix, 16) = Mid(Deport, 25, 8)
If Chk05.Value Then Cells(Ix, 17) = Mid(Deport, 33, 8)
Ix = Ix + 1
Range("Z1") = Ix
End Sub
 

Botón [Nuevo]. Haga doble clic en este botón.

Aquí se trata de “limpiar” el contenido de todos los botones de cuadro de texto, los de opciones y las casillas.

Los botones de opciones y casillas, se “limpia” usando la sentencia Obj.Value =False. De manera que el contenido del procedimiento relativo a este botón es:

Private Sub CmdNuevo_Click()

TxtApat.Text = ""
TxtAmat.Text = ""
TxtDirec.Text = ""
TxtDist.Text = ""
TxtProv.Text = ""
TxtReg.Text = ""
TxtApat.Text = ""
OpcM.Enabled = False
OpcF.Enabled = False
Chk01.Enabled = False
Chk02.Enabled = False
Chk03.Enabled = False
Chk04.Enabled = False
Chk05.Enabled = False
TxtApat.SetFocus
End Sub
 

Finalmente insertaremos un módulo para disponer del procedimiento:

Sub ModDatos()
FrmDatos.Show
End Sub
 

Y también, insertaremos un botón de comando en una celda de la hoja Datos (se muestra en la segunda imagen adjunta) al cual lo vincularemos con dicho procedimiento y le pondremos por nombre [Formulario].

Grabe este archivo con el nombre Mis Formularios05 habilitado para macros.

Si desea ver este formulario (MisFormularios05.xlsm) haga clic aquí