DESARROLLO DE APLICACIONES EN MICROSOFT® EXCEL
Juan Carlos Vergara Schmalbach y Víctor Manuel Quesada Ibargüen
Esta página muestra parte del texto pero sin formato.
Puede bajarse el libro completo en PDF comprimido ZIP (162 páginas, 1.85 Mb) pulsando aquí
Objetivo: Desarrollar un ejercicio para diseñar la aplicación ESCUELA DE MASCOTAS, como herramienta de apoyo para la gestión de una microempresa encargada del adiestramiento de perros domésticos.
Primer paso: Diseño de la portada de la aplicación
Diseñe una portada relacionada con la razón social de la empresa. Agregue imágenes alusivas al adestramiento de mascotas. Incluya un botón denominado CONTINUAR con un hipervínculo que dirija al usuario a una hoja de nombre FACTURAR.
En este caso, se eliminaron las líneas de división y encabezados, desmarcando la opción VER que se encuentra en la ficha DISEÑO DE PÁGINA en Office 2007 o en la ficha VISTA para Office 2010.
Proteja la hoja, desmarcando la opción SELECCIONAR CELDAS BLOQUEADAS, con el fin de evitar daños involuntarios en la portada.
Segundo paso: Diseño de la plantilla para la facturación
La aplicación contendrá 4 hojas: PORTADA, FACTURAR, ENTRENAMIENTO y REGISTRO. Antes de pasar al diseño de las tres últimas hojas, procederemos a crear un menú en común que permita el desplazamiento entre hojas. Inicie insertando tres botones, agregando un hipervínculo respectivo para cada hoja.
Seleccione toda la hoja, y copie su contenido para luego pegarlo en las hojas restantes. Elimine las líneas de división y encabezados, desmarcando la opción VER que se encuentra en la ficha DISEÑO DE PÁGINA en Office 2007 o en la ficha VISTA para Office 2010.
En la hoja FACTURAR, diseñe una tabla que contenga los siguientes campos:
Nombre Mascota (máximo 20 caracteres)
Código
Actividades Realizadas
Fecha
Valor Actividad
Subtotal
IVA
Valor Total
Estado
Selecciones las celdas de contenido de los campos (puede ayudarse con la tecla CONTROL para seleccionar celdas no consecutivas) y pulsando con el botón derecho del mouse sobre ellas, desmarque la opción BLOQUEADA que se encuentra en FORMATO DE CELDAS ficha PROTEGER.
Agregue las fórmulas necesarias para calcular el SUBTOTAL, IVA (equivalente al 16% del SUBTOTAL) y VALOR TOTAL. En el valor del campo ESTADO, escriba SIN CANCELAR.
Tercer paso: Diseño del formulario de Facturación
Diseñe un formulario que contenga los campos descritos en el paso anterior como se puede observar en la siguiente ilustración.
Proteja los TEXTBOX correspondientes a NOMBRE MASCOTA, ACTIVIDADES REALIZADAS, FECHA y VALOR, modificando la opción ENABLED a FALSE. Haga doble click en el botón ACEPTAR y escriba el siguiente código. La función de este botón es trasladar los datos del USERFORM1 a la hoja de cálculo.
Private Sub CommandButton2_Click()
Cells(3, 6).Value = TextBox1.Text
Cells(3, 12).Value = TextBox2.Text
Cells(6, 5).Value = TextBox3.Text
Cells(6, 8).Value = TextBox4.Text
Cells(6, 9).Value = TextBox5.Text
Cells(7, 5).Value = TextBox6.Text
Cells(7, 8).Value = TextBox7.Text
Cells(7, 9).Value = TextBox8.Text
Cells(8, 5).Value = TextBox9.Text
Cells(8, 8).Value = TextBox10.Text
Cells(8, 9).Value = TextBox11.Text
Cells(9, 5).Value = TextBox12.Text
Cells(9, 8).Value = TextBox13.Text
Cells(9, 9).Value = TextBox14.Text
Cells(14, 9).Value = Label6.Caption
TextBox1.Text = ""
TextBox2.Text = ""
TextBox3.Text = ""
TextBox4.Text = ""
TextBox5.Text = ""
TextBox6.Text = ""
TextBox7.Text = ""
TextBox8.Text = ""
TextBox9.Text = ""
TextBox10.Text = ""
TextBox11.Text = ""
TextBox12.Text = ""
TextBox13.Text = ""
TextBox14.Text = ""
Label6.Caption ="SIN CANCELAR"
End Sub
Nótese que se traslada el valor del CAPTION del componente LABEL6. Más adelante se incluirá el código del botón BUSCAR. Bloquearemos momentáneamente el botón ACEPTAR en el momento que se active la ventana. Para cumplir con esta tarea deberá hacer doble click en la ventana (USERFORM1), seleccionando el PROCEDIMIENTO ACTIVATE e ingresando el siguiente código.
Private Sub UserForm_Activate()
CommandButton2.Enabled = False
End Sub
Cuarto paso: Activar el formulario desde la hoja de cálculo
Regrese a la hoja de cálculo y haga doble click en el botón FACTURAR (ver ilustración) y escriba el siguiente código.
Private Sub CommandButton1_Click()
UserForm1.Show
End Sub
Proteja la hoja desde la ficha REVISAR, desmarcando la opción SELECCIONAR CELDAS BLOQUEADAS.
Quinto paso: Plantilla y formularios para el registro de entrenamientos
Diseñe una tabla en la hoja ENTRENAMIENTO que contenga los siguientes campos:
Código
Nombre Mascota (máximo 20 caracteres)
Actividades 1
Fecha 1
Actividades 2
Fecha 2
Actividades 3
Fecha 3
Actividades 4
Fecha 5
Diríjase a la consola de Visual Basic y diseñe el siguiente formulario (USERFORM2).
En esta ventana se incluyeron 4 COMBOBOX para identificar las actividades. La programación de esto elementos se realizará al final del documento. Proteja el TEXTBOX correspondiente a NOMBRE MASCOTA modificando la opción ENABLED a FALSE. Haga doble click en el botón ACTUALIZAR y escriba el siguiente código. La función de este botón es trasladar o actualizar unos datos existentes del USERFORM2 a la hoja de cálculo.
Private Sub CommandButton3_Click()
ESCRITO = "NO"
If TextBox2.Text <> "" And TextBox1.Text <> "" And TextBox3 <> "" Then
ESCRITO = "SI"
Else
MsgBox ("DEBE DE ESCRIBIR POR LO MENOS UNA ACTIVIDAD")
End If
ENCONTRADO = "NO"
For I = 1 To 100
If TextBox2.Text = Cells(I + 2, 5).Value Then
ENCONTRADO = "SI"
Exit For
End If
Next
If ENCONTRADO = "NO" And ESCRITO = "SI" Then
For I = 1 To 100
If Cells(I + 2, 5).Value = "" Then
Cells(I + 2, 5).Value = TextBox2.Text
Cells(I + 2, 6).Value = TextBox1.Text
Cells(I + 2, 7).Value = ComboBox1.Text
Cells(I + 2, 8).Value = TextBox3.Text
Cells(I + 2, 9).Value = ComboBox2.Text
Cells(I + 2, 10).Value = TextBox4.Text
Cells(I + 2, 11).Value = ComboBox3.Text
Cells(I + 2, 12).Value = TextBox5.Text
Cells(I + 2, 13).Value = ComboBox4.Text
Cells(I + 2, 14).Value = TextBox6.Text
TextBox1.Text = ""
TextBox2.Text = ""
TextBox3.Text = ""
TextBox4.Text = ""
TextBox5.Text = ""
TextBox6.Text = ""
ComboBox1.Text = ""
ComboBox2.Text = ""
ComboBox3.Text = ""
ComboBox4.Text = ""
Exit For
End If
Next
End If
If ENCONTRADO = "SI" And ESCRITO = "SI" Then
For I = 1 To 100
If TextBox2.Text = Cells(I + 2, 5).Value Then
Cells(I + 2, 5).Value = TextBox2.Text
Cells(I + 2, 6).Value = TextBox1.Text
Cells(I + 2, 7).Value = ComboBox1.Text
Cells(I + 2, 8).Value = TextBox3.Text
Cells(I + 2, 9).Value = ComboBox2.Text
Cells(I + 2, 10).Value = TextBox4.Text
Cells(I + 2, 11).Value = ComboBox3.Text
Cells(I + 2, 12).Value = TextBox5.Text
Cells(I + 2, 13).Value = ComboBox4.Text
Cells(I + 2, 14).Value = TextBox6.Text
TextBox1.Text = ""
TextBox2.Text = ""
TextBox3.Text = ""
TextBox4.Text = ""
TextBox5.Text = ""
TextBox6.Text = ""
ComboBox1.Text = ""
ComboBox2.Text = ""
ComboBox3.Text = ""
ComboBox4.Text = ""
Exit For
End If
Next
End If
End Sub
Observe que en el código se declaran dos variables: ESCRITO y ENCONTRADO. La primera cambia su valor a SI siempre y cuando, exista un texto escrito en los TEXTBOX 1, 2 y 3. Esto evita que el usuario realice una modificación en la tabla sin haber escrito nada en el USERFORM. La segunda variable torna su valor SI en el momento en que se encuentre una coincidencia entre el campo CÓDIGO (TEXTBOX2) del USERFORM2 y la celda de la tabla correspondiente a dicho CÓDIGO. La rutina continúa con dos condicionales:
IF ENCONTRADO = "NO" AND ESCRITO = "SI" THEN ->> En caso de que los valores de las variables ENCONTRADO y ESCRITO sean NO y SI respectivamente, se procederá a agregar un nuevo registro.
IF ENCONTRADO = "SI" AND ESCRITO = "SI" THEN ->> En caso de que ambos valores de las variables sean SI, se procederá a actualizar un registro existente.
Antes de pasar a programar el botón BORRAR, adicionaremos un nuevo USERFORM (USERFOM3) para validar la eliminación de un registro con una CONTRASEÑA. Diseñe el formulario de acuerdo a la siguiente ilustración. Modifique las propiedades MAXLENGTH y PASSWORDCHAR del TEXTBOX1 en 4 y * respectivamente.
Regrese al formulario anterior (USERFORM2) y haga doble click en el botón BORRAR, agregando el siguiente código
Private Sub CommandButton2_Click()
UserForm3.Show
End Sub
Bloquearemos momentáneamente el botón BORRAR y ACTUALIZAR en el momento que se active la ventana. Para cumplir con esta tarea deberá hacer doble click en la ventana (USERFORM2), seleccionando el PROCEDIMIENTO ACTIVATE e ingresando el siguiente código.
Private Sub UserForm_Activate()
CommandButton2.Enabled = False
CommandButton3.Enabled = False
End Sub
Visualice el USERFORM3, y programe el código para el botón BORRAR.
Private Sub CommandButton1_Click()
If TextBox1 <> "1234" Then
MsgBox ("LA CONTRASEÑA NO ES CORRECTA")
Else
For I = 1 To 100
If UserForm2.TextBox2.Text = Cells(I + 2, 5).Value Then
Range(Cells(I + 2, 5), Cells(I + 2, 14)).Select
Selection.ClearContents
Range(Cells(I + 3, 5), Cells(102, 14)).Select
Selection.Cut
Cells(I + 2, 5).Select
ActiveSheet.Paste
Exit For
End If
Next
End If
End Sub
Inserte un botón en la hoja (ENTRENAMIENTO) denominado REGISTRAR y escriba el siguiente código en él.
Private Sub CommandButton1_Click()
UserForm2.Show
End Sub
No se le olvide desbloquear las celdas correspondientes a los registros de la tabla (seleccione un todas las filas de la tabla para desbloquearlas, en caso contrario el programa producirá un error) y proteger la hoja desmarcando la opción SELECCIONAR CELDAS BLOQUEADAS. El resultado final debería verse como en la siguiente ilustración.
Sexto paso: Plantilla y formularios para el registro de mascotas y actividades de entrenamiento
Diseñe dos tablas en la hoja REGISTRO correspondientes al registro de mascotas y actividades de entrenamiento. Incluya los siguientes campos como puede observarse en la siguiente ilustración:
Código
Nombre Mascota (máximo 20 caracteres)
Estado
Actividad (se aceptan máximo 4 actividades de máximo 10 caracteres)
Valor
Diseñe y programe el formulario (USERFORM4) para la primera tabla.
Registre el siguiente código en el botón INGRESAR.
Private Sub CommandButton2_Click()
REGISTRADO = "NO"
For I = 1 To 100
If TextBox2.Text = Cells(I + 2, 5).Value Then
MsgBox ("LA MASCOTA YA ESTA REGISTRADA")
REGISTRADO = "SI"
Exit For
End If
Next
If REGISTRADO = "NO" Then
For I = 1 To 100
If Cells(I + 2, 5).Value = "" Then
Cells(I + 2, 5).Value = TextBox2.Text
Cells(I + 2, 6).Value = TextBox1.Text
Cells(I + 2, 7).Value = "SIN CANCELAR"
TextBox1.Text = ""
TextBox2.Text = ""
Exit For
End If
Next
End If
End Sub
Registre el código en el botón BORRAR.
Private Sub CommandButton2_Click()
For I = 1 To 100
If TextBox2.Text = Cells(I + 2, 5).Value Then
Range(Cells(I + 2, 5), Cells(I + 2, 7)).Select
Selection.ClearContents
Range(Cells(I + 3, 5), Cells(102, 7)).Select
Selection.Cut
Cells(I + 2, 5).Select
ActiveSheet.Paste
Exit For
End If
Next
End Sub
Diseñe y programe el formulario (USERFORM5) para el registro de las actividades de entrenamiento.
Ingrese el código en botón REGISTRAR.
Private Sub CommandButton2_Click()
REGISTRADO = "NO"
For I = 1 To 4
If Cells(I + 2, 9).Value = TextBox1.Text Then
REGISTRADO = "SI"
Cells(I + 2, 9).Value = TextBox1.Text
Cells(I + 2, 10).Value = TextBox2.Text
TextBox1.Text =””
TextBox2.Text =””
Exit For
End If
Next
If REGISTRADO = "NO" Then
For I = 1 To 4
If Cells(I + 2, 9).Value = "" Then
REGISTRADO = "SI"
Cells(I + 2, 9).Value = TextBox1.Text
Cells(I + 2, 10).Value = TextBox2.Text
TextBox1.Text =””
TextBox2.Text =””
Exit For
End If
Next
End If
End Sub
La rutina anterior permite ingresar o actualizar el registro de una actividad, gracias a la variable REGISTRADO. Agregue dos botones en la hoja REGISTRO llamados REG. MASCOTA y REG. ACTIVIDAD con los siguientes códigos respectivos:
Private Sub CommandButton1_Click()
UserForm4.Show
End Sub
Private Sub CommandButton1_Click()
UserForm5.Show
End Sub
Desbloqueé las celdas correspondientes a los registros de ambas tablas (seleccione un todas las filas de las tablas para desbloquearlas, en caso contrario el programa producirá un error) y proteja la hoja desde la ficha REVISAR, desmarcando la opción SELECCIONAR CELDAS BLOQUEADAS.
Elimine las líneas de división y encabezados, desmarcando la opción VER que se encuentra en la ficha DISEÑO DE PÁGINA en Office 2007 o en la ficha VISTA para Office 2010 (esto debe realizarlo a todas las hojas del libro).
Séptimo paso: Programación de los COMBOBOX del formulario USERFOM2 (REGISTRO DE ENTRENAMIENTOS)
Haga doble click en la ventana (USERFORM2), seleccionando el PROCEDIMIENTO ACTIVATE y adicione el siguiente código (se encuentra en color azul).
Private Sub UserForm_Activate()
CommandButton2.Enabled = False
CommandButton3.Enabled = False
ComboBox1.Clear
ComboBox1.AddItem (Sheets("REGISTRO").Cells(3, 9).Value)
ComboBox1.AddItem (Sheets("REGISTRO").Cells(4, 9).Value)
ComboBox1.AddItem (Sheets("REGISTRO").Cells(5, 9).Value)
ComboBox1.AddItem (Sheets("REGISTRO").Cells(6, 9).Value)
ComboBox2.Clear
ComboBox2.AddItem (Sheets("REGISTRO").Cells(3, 9).Value)
ComboBox2.AddItem (Sheets("REGISTRO").Cells(4, 9).Value)
ComboBox2.AddItem (Sheets("REGISTRO").Cells(5, 9).Value)
ComboBox2.AddItem (Sheets("REGISTRO").Cells(6, 9).Value)
ComboBox3.Clear
ComboBox3.AddItem (Sheets("REGISTRO").Cells(3, 9).Value)
ComboBox3.AddItem (Sheets("REGISTRO").Cells(4, 9).Value)
ComboBox3.AddItem (Sheets("REGISTRO").Cells(5, 9).Value)
ComboBox3.AddItem (Sheets("REGISTRO").Cells(6, 9).Value)
ComboBox4.Clear
ComboBox4.AddItem (Sheets("REGISTRO").Cells(3, 9).Value)
ComboBox4.AddItem (Sheets("REGISTRO").Cells(4, 9).Value)
ComboBox4.AddItem (Sheets("REGISTRO").Cells(5, 9).Value)
ComboBox4.AddItem (Sheets("REGISTRO").Cells(6, 9).Value)
End Sub
Con esta rutina incluiremos las actividades de entrenamiento en la hoja REGISTRO en cada COMBOBOX, facilitando su selección por parte del usuario. Realice una prueba del formulario.
Octavo paso: Programación de los botones denominados BUSCAR
Para finalizar, se programarán los botones BUSCAR de los USERFORM 1 y 2. Haga doble click en el botón BUSCAR del primer USERFORM e incluya el código:
Private Sub CommandButton1_Click()
ACIERTO = "NO"
For I = 1 To 100
If TextBox2.Text = Sheets("REGISTRO").Cells(I + 2, 5).Value And TextBox2.Text <> "" Then
ACIERTO = "SI"
TextBox1.Text = Sheets("REGISTRO").Cells(I + 2, 6).Value
Label6.Caption = Sheets("REGISTRO").Cells(I + 2, 7).Value
CommandButton2.Enabled = True
Exit For
End If
Next
If ACIERTO = "NO" Then
MsgBox ("LA MASCOTA NO SE ENCUENTRA REGISTRADA")
End If
If ACIERTO = "SI" Then
For I = 1 To 100
If TextBox2.Text = Sheets("ENTRENAMIENTO").Cells(I + 2, 5).Value Then
TextBox3.Text = Sheets("ENTRENAMIENTO").Cells(I + 2, 7).Value
TextBox4.Text = Sheets("ENTRENAMIENTO").Cells(I + 2, 8).Value
TextBox6.Text = Sheets("ENTRENAMIENTO").Cells(I + 2, 9).Value
TextBox7.Text = Sheets("ENTRENAMIENTO").Cells(I + 2, 10).Value
TextBox9.Text = Sheets("ENTRENAMIENTO").Cells(I + 2, 11).Value
TextBox10.Text = Sheets("ENTRENAMIENTO").Cells(I + 2, 12).Value
TextBox12.Text = Sheets("ENTRENAMIENTO").Cells(I + 2, 13).Value
TextBox13.Text = Sheets("ENTRENAMIENTO").Cells(I + 2, 14).Value
For J = 1 To 4
If TextBox3.Text = Sheets("REGISTRO").Cells(J + 2, 9) Then
TextBox5.Text = Sheets("REGISTRO").Cells(J + 2, 10)
End If
If TextBox6.Text = Sheets("REGISTRO").Cells(J + 2, 9) Then
TextBox8.Text = Sheets("REGISTRO").Cells(J + 2, 10)
End If
If TextBox9.Text = Sheets("REGISTRO").Cells(J + 2, 9) Then
TextBox11.Text = Sheets("REGISTRO").Cells(J + 2, 10)
End If
If TextBox12.Text = Sheets("REGISTRO").Cells(J + 2, 9) Then
TextBox14.Text = Sheets("REGISTRO").Cells(J + 2, 10)
End If
Next
Exit For
End If
Next
End If
End Sub
Si se encuentra la MASCOTA registrada, la variable ACIERTO cambiará su valor a SI. El fragmento de código siguiente (se ejecuta cuando la variable ACIERTO es SI) muestra el traslado de los datos de la hoja ENTRENAMIENTO a los TEXTBOX respectivos para las ACTIVIDADES REALIZADAS y FECHA. El código continúa verificando el valor de las actividades.
Pulse doble click en el botón BUSCAR del USERFORM2 ingresando el siguiente código.
Private Sub CommandButton1_Click()
ACIERTO = "NO"
For I = 1 To 100
If TextBox2.Text = Sheets("REGISTRO").Cells(I + 2, 5).Value And TextBox2.Text <> "" Then
TextBox1.Text = Sheets("REGISTRO").Cells(I + 2, 6).Value
CommandButton2.Enabled = True
CommandButton3.Enabled = True
ACIERTO = "SI"
Exit For
End If
Next
If ACIERTO = "NO" Then
MsgBox ("LA MASCOTA NO SE ENCUENTRA REGISTRADA")
End If
End Sub
Observe que una vez encontrado el registro de la mascota (ACIERTO = “SI”), se activan los botones BORRAR y ACTUALIZAR.
Para terminar con la programación general de la aplicación, vamos agregar un fragmento de código que actualice el estado de la mascota de SIN CANCELAR a CANCELADO. Agregue un botón a la hoja FACTURAR denominado CANCELAR e ingrese el siguiente código.
Private Sub CommandButton2_Click()
If Cells(14, 9).Value = "SIN CANCELAR" And Cells(3, 12).Value <> "" Then
Cells(14, 9).Value = "CANCELADO"
For I = 1 To 100
If Sheets("REGISTRO").Cells(I + 2, 5).Value = Cells(3, 12).Value Then
Sheets("REGISTRO").Cells(I + 2, 7).Value = "CANCELADO"
Range("E6:I9").Select
Selection.ClearContents
Exit For
End If
Next
Else
MsgBox ("LA FACTURA SE ENCUENTRA CANCELADA")
End If
End Sub
Noveno paso: Prueba Básica de la aplicación
1.Ingrese las siguientes actividades en la hoja REGISTRO (los precios regístrelos sin signos y puntuaciones)
Básica 1 -> $65.000
Básica 2 -> $75.000
Avanzado 1 -> $150.000
Avanzado 2 -> $120.000
2.Modifique el precio de la actividad Básica 2 a $70.000
3.Ingrese la siguientes mascotas con sus respectivos códigos
Homero -> 4321
Doggy -> 5552
Pulgoso -> 3950
Pastor -> 2001
4.Borre la mascota de código 5552 (el resultado preliminar de la hoja debería quedar como se muestra en la siguiente ilustración).
5.Registre los siguientes entrenamientos para las mascotas (en la hoja ENTRENAMIENTO):
Pulgoso -> 3950
Actividad Básica 1 (10-May-10) Avanzado 1 (15-Jun-10)
Pastor -> 2001
Actividad Básica 1 (10-May-10) Básica 2 (19-May-10)
Avanzado 1 (15-Jun-10)
6.En la hoja FACTURAR pulse el botón del mismo nombre y busque el código 2001. Luego pulse el botón ACEPTAR.
Verifique el valor total ($ 324.800).
7.Ahora pulse sobre el botón CANCELAR de la hoja y verifique que el estado de la cuenta pase a CANCELADO.