A continuación vamos a ver un programa en Excel VBA que crea un formulario de usuario interactiva. El formulario de usuario que se va a crear un aspecto de la siguiente manera:

Excel VBA Interactive Userform

Explicación: cada vez que se introduce un valor en el cuadro de texto ID, Excel VBA carga el registro correspondiente. Al hacer clic en el botón Editar / Añadir, Excel VBA edita el registro en la hoja o agrega el registro cuando no existe aún la identificación. El botón Borrar borra todos los cuadros de texto. El botón Cerrar cierra el formulario de usuario.

Para crear este formulario de usuario, ejecute los siguientes pasos.

  1. Abra el Editor de Visual Basic. Si el Explorador de proyectos no es visible, haga clic en Ver, Explorador de proyectos.

  2. Haga clic en Insertar, formulario de usuario. Si el cuadro de herramientas no aparece automáticamente, haga clic en Ver, Caja de herramientas. Su pantalla debe ser configurado de la siguiente manera.

Userform Screen Setup in Excel VBA

  1. Añadir las etiquetas, cuadros de texto (primero en la parte superior, el segundo por debajo de la primera, y así sucesivamente) y botones de comando. Una vez que esto se ha completado, el resultado debe ser consistente con la imagen del formulario de usuario mostrado anteriormente. Por ejemplo, crear un control de cuadro de texto, haga clic en Cuadro de texto del cuadro de herramientas. A continuación, puede arrastrar un cuadro de texto en el formulario de usuario.

  2. Puede cambiar los nombres y los títulos de los controles. Los nombres se utilizan en el código VBA Excel. Los títulos son los que aparecen en la pantalla. Es una buena práctica para cambiar los nombres de los controles, pero no es necesario en este caso, porque sólo tenemos unos pocos controles en este ejemplo. Para cambiar el título de las etiquetas, cuadros de texto y botones de comando, haga clic en Ver, Ventana Propiedades y haga clic en cada control.

  3. Para mostrar el formulario de usuario, coloque un botón de comando en la hoja de trabajo y agregue la línea siguiente código:

Private Sub CommandButton1_Click()

UserForm1.Show

End Sub

Ahora vamos a crear el Sub UserForm_Initialize. Cuando se utiliza el método Show para el formulario de usuario, automáticamente se ejecutará este sub.

  1. Abra el Editor de Visual Basic.

  2. En el Explorador de proyectos, haga clic en UserForm1 y haga clic en Ver código.

  3. Elegir formulario de usuario de la lista desplegable izquierda. Inicializar elegir de la lista desplegable de la derecha.

  4. Añadir la siguiente línea de código:

Private Sub UserForm_Initialize()

TextBox1.SetFocus

End Sub

Explicación: esta línea de código establece el foco en el primer cuadro de texto ya que es donde queremos empezar cuando se carga el formulario de usuario.

Ahora hemos creado la primera parte del formulario de usuario. A pesar de que se ve bien ya, no pasará nada sin embargo, cuando entramos en un valor en el cuadro de texto ID o cuando hacemos clic en uno de los botones de comando.

  1. En el Explorador de proyectos, haga clic en UserForm1 y haga clic en Ver código.

  2. Elija TextBox1 de la lista desplegable-izquierda. Elija el Cambio de la lista desplegable de la derecha.

  3. Agregue la siguiente línea de código:

Private Sub TextBox1_Change()

GetData

End Sub
  1. En el Explorador de proyectos, haga doble clic en UserForm1.

  2. Haga doble clic en el Editar / Añadir botón de comando.

  3. Agregue la siguiente línea de código:

Private Sub CommandButton1_Click()

EditAdd

End Sub
  1. Haga doble clic en el botón de comando Borrar.

  2. Agregar la siguiente línea de código:

Private Sub CommandButton2_Click()

ClearForm

End Sub

Explicación: estos submarinos llaman otros submarinos que vamos a crear en un segundo.

  1. Haga doble clic en el botón de comando Cerrar.

  2. Agregar la siguiente línea de código:

Private Sub CommandButton3_Click()

Unload Me

End Sub

Explicación: esta línea de código cierra el formulario de usuario.

Tiempo necesario para crear los submarinos. Puede ir a través de nuestro capítulo Función y Sub para aprender más sobre los submarinos. Si se tiene prisa, simplemente coloque los siguientes submarinos en un módulo (En el Editor de Visual Basic, haga clic en Insertar, Módulo).

  1. En primer lugar, declare tres variables de tipo entero y una variable de tipo booleano. Declarar las variables en la sección de declaraciones generales (en la parte superior del módulo). De esta manera es suficiente para declarar las variables de una vez y se puede utilizar en múltiples sustituciones.

Dim id As Integer, i As Integer, j As Integer, flag As Boolean
  1. Añadir el sub GetData.

Sub GetData()

If IsNumeric(UserForm1.TextBox1.Value) Then

flag = False

i = 0

id = UserForm1.TextBox1.Value

Do While Cells(i + 1, 1).Value <> ""

If Cells(i + 1, 1).Value = id Then

flag = True

For j = 2 To 3

UserForm1.Controls("TextBox" & j).Value = Cells(i + 1, j).Value

Next j

End If

i = i + 1

Loop

If flag = False Then

For j = 2 To 3

UserForm1.Controls("TextBox" & j).Value = ""

Next j

End If

Else

ClearForm

End If

End Sub

Explicación: Si el cuadro de texto ID contiene un valor numérico, Excel VBA busca el ID y carga el registro correspondiente. Usamos el enlace: / VBA ejemplos controles de recolección [Controles Colección] para facilidad bucle a través de los cuadros de texto. Si Excel VBA no puede encontrar el ID (bandera sigue siendo falso), se vacía la caja de texto de segunda y tercera. Si el cuadro de texto ID no contiene un valor numérico, Excel VBA llama al sub ClearForm.

  1. Añadir el sub ClearForm.

Sub ClearForm()

For j = 1 To 3

UserForm1.Controls("TextBox" & j).Value = ""

Next j

End Sub

Explicación: Excel VBA borra todos los cuadros de texto.

  1. Añadir el sub EditAdd.

Sub EditAdd()

Dim emptyRow As Long

If UserForm1.TextBox1.Value <> "" Then

flag = False

i = 0

id = UserForm1.TextBox1.Value

emptyRow = WorksheetFunction.CountA(Range("A:A")) + 1

Do While Cells(i + 1, 1).Value <> ""

If Cells(i + 1, 1).Value = id Then

flag = True

For j = 2 To 3

Cells(i + 1, j).Value = UserForm1.Controls("TextBox" & j).Value

Next j

End If

i = i + 1

Loop

If flag = False Then

For j = 1 To 3

Cells(emptyRow, j).Value = UserForm1.Controls("TextBox" & j).Value

Next j

End If

End If

End Sub

Explicación: Si el cuadro de texto ID no está vacía, Excel VBA edita el registro en la hoja (lo contrario de la carga de un registro como hemos visto anteriormente).

Si Excel VBA no puede encontrar el ID (bandera sigue siendo falso), se añade el registro a la siguiente fila vacía. El emptyRow variable es la primera fila vacía y aumenta cada vez que se agrega un registro.

  1. Salga del Editor de Visual Basic, escriba las etiquetas que se muestran a continuación en la fila 1 y probar el formulario de usuario.

Excel VBA Interactive Userform