Los controles (Controls) tienen todo tipo de propiedades y muchos eventos asociados con ellos, pero por ahora veremos solo algunos que se usan en la programación en VBA.
Comencemos agregando 3 controles: Label, TextBox y CommandButton:
Edite el nombre y las propiedades de este control (usando la propiedad Caption que contiene el texto) para obtener el siguiente resultado:
Ahora, cuando ingresamos el número y hacemos clic en Aceptar, no pasa nada.
Para crear una acción, agregaremos un evento que escribirá el valor ingresado desde el cuadro de texto a la celda A1 y cerrará el formulario.
Puede acceder a las opciones que se muestran a continuación haciendo doble clic en el control:
Esta lista desplegable contiene varios controles y este formulario.
Seleccione el botón (Button) y el evento Click:
Private Sub CommandButton_validate_Click()
Range("A1") = Textbox_number.Value
'Textbox_number es el nombre del cuadro de texto
'Value es una propiedad que contiene el valor del cuadro de texto
Unload Me
'Descargar cierra el formulario (UserForm)
'Usamos Me en lugar del nombre del formulario (porque este código está en medio de UserForm que queremos cerrar)
End Sub
El valor ingresado ahora ya se guardará en la celda A1 antes de cerrar este formulario (UserForm).
Agregue un segundo título (Label) y edite las siguientes propiedades: Caption, Forecolor (color: rojo) y Visible (False para ocultar el control predeterminado):
Ahora agreguemos un evento que se activará cuando el usuario cambie el valor en el campo de texto. El evento mostrará un mensaje de error si el valor no es numérico.
Private Sub Textbox_number_Change()
If IsNumeric(Textbox_number.Value) Then 'SI es un valor numérico...
Label_error.Visible = False 'El título (Label) está oculto
Else 'DE LO CONTRARIO...
Label_error.Visible = True 'El nombre se muestra
End If
End Sub
El valor ingresado se probará cada vez que se ingrese el siguiente carácter.
Todavía necesitamos agregar la verificación (validación) de los valores ingresados en el formulario. Mostraremos un mensaje si el valor no es un número:
Private Sub CommandButton_validate_Click()
If IsNumeric(Textbox_number.Value) Then 'SI es un valor numérico...
Range("A1") = Textbox_number.Value 'Copiar a A1
Unload Me 'estoy cerrando
Else 'DE LO CONTRARIO...
MsgBox "Incorrect value" 'valor no válido
End If
End Sub
Para no dejar vacío el lado derecho del formulario cuando no hay mensaje de error, podemos reducir su tamaño ajustando la propiedad Width de este formulario:
Private Sub Textbox_number_Change()
If IsNumeric(Textbox_number.Value) Then 'SI es un valor numérico...
Label_error.Visible = False 'El título (Label) está oculto
Me.Width = 156 'Ancho del formulario
Else 'DE LO CONTRARIO...
Label_error.Visible = True 'El nombre se muestra
Me.Width = 244 'Ancho del formulario
End If
End Sub
Puede descargar el archivo de ejemplo Excel: formulario de usuario1.xls
Aquí está el resultado:

Aquí hay un ejemplo de cómo usar CheckBox:
Cuando la casilla de verificación está marcada/desmarcada, el valor de la celda asociada se puede cambiar usando el evento Click:
Private Sub CheckBox1_Click() 'Numero 1
If CheckBox1.Value = True Then 'SI seleccionado...
Range("A2") = "Checked"
Else 'SI no se selecciona...
Range("A2") = "Unchecked"
End If
End Sub
Private Sub CheckBox2_Click() 'Número 2
If CheckBox2.Value = True Then 'SI seleccionado...
Range("B2") = "Checked"
Else 'SI no se selecciona...
Range("B2") = "Unchecked"
End If
End Sub
Private Sub CheckBox3_Click() 'Numero 3
If CheckBox3.Value = True Then 'SI seleccionado...
Range("C2") = "Checked"
Else 'SI no se selecciona...
Range("C2") = "Unchecked"
End If
End Sub
En este ejemplo, las casillas de verificación están inicialmente desmarcadas cuando se abre el formulario por primera vez.
Para marcar cada casilla de verificación cuando el valor de la celda correspondiente es "Anotado" ("Checked"), ejecutaremos la verificación en la activación del formulario usando UserForm_Initialize:
Private Sub UserForm_Initialize() 'Si está marcado
If Range("A2") = "Checked" Then
CheckBox1.Value = True
End If
If Range("B2") = "Checked" Then
CheckBox2.Value = True
End If
If Range("C2") = "Checked" Then
CheckBox3.Value = True
End If
End Sub
Aquí puede ver un ejemplo en el archivo Excel terminado: formulario de usuario2.xls
Al usar los botones de opción (Option Buttons o, a veces, también llamados Radio Buttons) el usuario puede seleccionar solo una opción por "grupo" a diferencia de las casillas de verificación donde el usuario puede marcar varias al mismo tiempo.
Para crear un "grupo", primero inserte Frame y luego OptionButton:
Aquí puede ver un ejemplo en el archivo Excel terminado: formulario de usuario3.xls
Al enviar el formulario, los datos se ingresarán en la celda asociada con el nombre de la columna seleccionada (column_value) y la fila (row_value).
Para saber qué opciones se seleccionaron, podríamos hacer lo mismo que en el ejemplo anterior (con casillas de verificación), pero usaremos un bucle para reducir el tamaño del código.
Usaremos el bucle For Each, que es un tipo de bucle que no hemos cubierto antes. Este ciclo le permite ejecutar instrucciones para cada objeto en el "grupo de objetos":
Private Sub CommandButton1_Click()
Dim column_value As String, row_value As String
'Bucle para cada control de columna Frame_
For Each column_button In Frame_column.Controls
'Si el valor de elem. control = True (entonces si se selecciona) ...
If column_button.Value Then
'La variable "column_value" toma el valor del texto del botón
column_value = column_button.Caption
End If
Next
'Ciclo para otro bloque
For Each row_button In Frame_row.Controls
If row_button.Value Then
row_value = row_button.Caption
End If
Next
Range(column_value & row_value) = "¡La celda está seleccionada!"
'Cerrar (Descargar) el formulario (Yo)
Unload Me
End Sub
Ahora nuestro formulario ingresa el valor "¡La celda está seleccionada!" en la celda seleccionada.
Para evitar un error, debemos verificar si el usuario ha elegido correctamente entre dos conjuntos de opciones.
En este ejemplo, cuando el formulario aún no está completo, el botón "Confirmación" ("Confirm") estará atenuado (deshabilitado). No es la solución más fácil, pero es un buen ejemplo de por qué las funciones/procedimientos son útiles en medio de un formulario (UserForm).
Edite el texto y la propiedad Habilitado para deshabilitar el botón.
El resultado será el siguiente:
En el código anterior, usamos dos bucles For Each para obtener los valores de los botones de opción (Option Buttons). Ahora necesitamos usar los mismos valores para el botón "Confirmación" ("Confirm") y el evento Click para las diez opciones.
Para hacer esto, no necesitamos copiar los bucles para cada evento, los llamaremos a través de una función.
Partiendo del código anterior y modificándolo, conseguiremos este resultado:
Private Function column_value()
'Una función que devuelve un valor de texto para el botón seleccionado (column_value)
For Each column_button In Frame_column.Controls
If column_button.Value Then
column_value = column_button.Caption
End If
Next
End Function
Private Function row_value()
'Una función que devuelve un valor de texto para el botón seleccionado (row_value)
For Each row_button In Frame_row.Controls
If row_button.Value Then
row_value = row_button.Caption
End If
Next
End Function
Private Sub CommandButton1_Click() 'Acción que ocurre cuando hace clic en ("Confirmar su selección")
Range(column_value & row_value) = "¡La celda está seleccionada!"
'column_value y row_value son los valores devueltos por estas funciones
Unload Me
End Sub
Todo lo que nos queda por hacer es crear una rutina que verifique si los botones de opción se han seleccionado correctamente (llamando a dos funciones) y que active ese botón cuando sea necesario.
Nuevamente, la validación se realiza en un procedimiento separado para evitar copiar el código 10 veces para cada evento de cada botón de radio:
Private Sub activate_button()
'Activar el botón si la condición se prueba con éxito
If column_value <> "" And row_value <> "" Then
'column_value y row_value son los valores devueltos por estas funciones
CommandButton1.Enabled = True
CommandButton1.Caption = "Confirma tu elección"
End If
End Sub
Private Sub OptionButton11_Click()
activate_button 'Iniciamos el procedimiento "activate_button"
End Sub
Private Sub OptionButton12_Click()
activate_button
End Sub
Private Sub OptionButton13_Click()
activate_button
End Sub
Private Sub OptionButton14_Click()
activate_button
End Sub
Private Sub OptionButton15_Click()
activate_button
End Sub
Private Sub OptionButton16_Click()
activate_button
End Sub
Private Sub OptionButton17_Click()
activate_button
End Sub
Private Sub OptionButton18_Click()
activate_button
End Sub
Private Sub OptionButton19_Click()
activate_button
End Sub
Private Sub OptionButton20_Click()
activate_button
End Sub
Aquí puede ver un ejemplo en el archivo Excel terminado: formulario de usuario3b.xls