A continuación veremos un programa en Excel VBA que crea una forma de usuario interactiva . El Userform que vamos a crear tiene el siguiente aspecto:
Explicación: cada vez que se introduce un valor en el cuadro de texto de identificación, Excel VBA carga el registro correspondiente. Cuando se hace clic en el botón Editar/Agregar, Excel VBA edita el registro en la hoja o agrega el registro cuando el ID todavía no existe. 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 está visible, haga clic en Ver, Explorador de Proyectos.
2. 2. Haga clic en Insertar, Formulario de usuario. 3. Si la Caja de herramientas no aparece automáticamente, haga clic en Ver, Caja de herramientas. La pantalla debe configurarse como se indica a continuación.
3. Añade las etiquetas, las cajas de texto (la primera arriba, la segunda debajo de la primera, y así sucesivamente) y los botones de comando. Una vez que esto se haya completado, el resultado debe ser consistente con la imagen del Formulario de Usuario mostrado anteriormente. Por ejemplo, cree un control de cuadro de texto haciendo clic en TextBox desde la Caja de Herramientas. A continuación, puede arrastrar un cuadro de texto en la Forma de usuario.
4. Puedes cambiar los nombres y los títulos de los controles. Los nombres se usan en el código VBA de Excel. Los subtítulos son los que aparecen en la pantalla. Es una buena práctica cambiar los nombres de los controles, pero no es necesario aquí porque sólo tenemos unos pocos controles en este ejemplo. Para cambiar la leyenda de las etiquetas, cuadros de texto y botones de comando, haga clic en Ver, Ventana de propiedades y haga clic en cada control.
5. Para mostrar el formulario de usuario, coloque un botón de comando en su hoja de trabajo y añada la siguiente línea de código:
Soldado Sub Sub CommandButton1_Click() Formulario de usuario1.Show End Sub
Ahora vamos a crear el Sub UserForm_Initialize. Al usar el método Show para el Userform, este sub se ejecutará automáticamente.
6. Abre el Editor de Visual Basic.
7. En el Explorador del Proyecto, haga clic con el botón derecho en UserForm1 y luego haga clic en View Code.
8. Seleccione Formulario de usuario en la lista desplegable de la izquierda. 9. Seleccione Inicializar en la lista desplegable de la derecha.
9. Añade 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 cargue el formulario de usuario.
Hemos creado la primera parte de la forma de usuario. Aunque ya se ve bien, no pasará nada todavía cuando introduzcamos un valor en el cuadro de texto de identificación o cuando hagamos clic en uno de los botones de comando.
10. En el Explorador del Proyecto, haga clic con el botón derecho del ratón en UserForm1 y luego haga clic en View Code.
11. 12. Selecciona TextBox1 de la lista desplegable de la izquierda. 12. Selecciona Cambiar en la lista desplegable de la derecha.
12. Añade la siguiente línea de código:
Private Sub TextBox1_Change() GetData End Sub
13. En el Explorador del Proyecto, haga doble clic en UserForm1.
14. Haga doble clic en el botón de comando Editar / Agregar.
15. Añade la siguiente línea de código:
Soldado Sub Sub CommandButton1_Click() EditAdd End Sub
16. Haga doble clic en el botón de comando Borrar.
17. Añade la siguiente línea de código:
Soldado Sub Sub CommandButton2_Click() ClearForm End Sub
Explicación: estos submarinos llaman a otros submarinos que vamos a crear en un segundo.
18. Haga doble clic en el botón de comando Cerrar.
19. Añade la siguiente línea de código:
Soldado Sub Sub CommandButton3_Click() Descárgueme End Sub
Explicación: esta línea de código cierra el formulario de usuario.
Es hora de crear los submarinos. Puedes ir a través de nuestro capítulo de funciones y subcapítulos para aprender más sobre los subs. Si tiene prisa, simplemente coloque los siguientes subs en un módulo (en el Editor de Visual Basic, haga clic en Insertar, Módulo).
20. Primero, declare tres variables de tipo entero y una variable de tipo booleano. Declare las variables en la sección de Declaraciones Generales (en la parte superior del módulo). De esta manera sólo tienes que declarar las variables una vez y puedes usarlas en múltiples subs.
Dim id Como Entero, i Como Entero, j Como Entero, bandera Como Booleana
21. Añada el subdirectorio GetData.
Sub GetData() Si es numérico (UserForm1.TextBox1.Value) entonces bandera = Falso i = 0 id = UserForm1.TextBox1.Value Do While Cells(i + 1, 1).Value <> «» Si las células(i + 1, 1).Valor = id Entonces bandera = Verdadero Para j = 2 a 3 UserForm1.Controls(«TextBox» & j).Value = Cells(i + 1, j).Value Siguiente j Finalizar si i = i + 1 Bucle Si la bandera = Falso Entonces Para j = 2 a 3 UserForm1.Controls(«TextBox» & j).Value = «» Siguiente j Finalizar si Else ClearForm Finalizar si End Sub
Explicación: Si el cuadro de texto del ID contiene un valor numérico, Excel VBA busca el ID y carga el registro correspondiente. Utilizamos la Colección de Controles para pasar fácilmente por los cuadros de texto. Si Excel VBA no puede encontrar el ID (el indicador sigue siendo Falso), vacía el segundo y el tercer cuadro de texto. Si el cuadro de texto ID no contiene un valor numérico, Excel VBA llama a la subcategoría ClearForm.
22. Añade el submarino ClearForm.
Sub ClearForm() Para j = 1 a 3 UserForm1.Controls(«TextBox» & j).Value = «» Siguiente j End Sub
Explicación: Excel VBA borra todas las cajas de texto.
23. Añade la subcategoría EditAdd.
Sub EditAdd() Diminuta fila vacía tanto tiempo Si UserForm1.TextBox1.Value <> «» Entonces bandera = Falso i = 0 id = UserForm1.TextBox1.Value emptyRow = WorksheetFunction.CountA(Range(«A:A»)) + 1 Do While Cells(i + 1, 1).Value <> «» Si las células(i + 1, 1).Valor = id Entonces bandera = Verdadero Para j = 2 a 3 Celdas(i + 1, j).Valor = UserForm1.Controles(«TextBox» & j).Valor Siguiente j Finalizar si i = i + 1 Bucle Si la bandera = Falso Entonces Para j = 1 a 3 Celdas(emptyRow, j).Valor = UserForm1.Controles(«TextBox» & j).Valor Siguiente j Finalizar si Finalizar si End Sub
Explicación: Si el cuadro de texto de identificación no está vacío, Excel VBA edita el registro en la hoja (lo opuesto a cargar un registro como hemos visto antes). Si Excel VBA no puede encontrar el ID (el indicador sigue siendo Falso), añade el registro a la siguiente fila vacía. La variable emptyRow es la primera fila vacía y aumenta cada vez que se añade un registro.
24. Salga del Editor de Visual Basic, introduzca las etiquetas que se muestran abajo en la fila 1 y pruebe el formulario de usuario.