Вы находитесь на странице: 1из 47

Formulario VBA (UserForms)

Hernán Calderón Herrera.


Enero 2019.

Corporación Universitaria Iberoamericana.


Meta.
Fundamentos de Programación
ii

Copyright © 2015 por Cristian Rojas & “ESTA PAGINA ES OPCIONAL” Miguel
Gutiérrez. Todos los derechos reservados.
Tabla de Contenidos iii

Capítulo 1 Introducción e información general .............................................................................. 1


Capítulo 2 Formularios en VBA (UserForm) ................................................................................ 2
Capítulo 3 ¿Cómo crear un Formulario en Excel (UserForm)? ...................................................... 3
Capítulo 4 Cuadros de control del UserForm ................................................................................ 5
Capítulo 5 Aplicación ..................................................................................................................... 7
Lista de figuras iv

Figura 1.. ............................................................................................................................. 3


Figura 2.. ............................................................................................................................. 3
Figura 3.. ............................................................................................................................. 5
Figura 4 ............................................................................................................................... 7
Figura 5. ............................................................................................................................ 10
Figura 6. ............................................................................................................................ 11
Figura 7. ............................................................................................................................ 29
1

Capítulo 1

Introducción e información general

Desarrollar soluciones mediante el análisis y diseño de modelos algorítmico, con

el fin de que sean usados en la labor profesional

Se realizara una actividad de investigación sobre UserForms, su concepto, como se crea

y cuál es su funcionalidad.

Comparación sobre los cuadros de control de UserForm para terminar de definir.

Una vez concluida nuestra investigación procederemos a realizar una aplicación por

medio de Formularios en Excel. La función principal de la aplicación es llevar las notas

de un docente, para lo cual debe cumplir con las siguientes funcionalidades:

o Creación de cursos hasta un máximo de 5.

o Ingreso de la información de los estudiantes del curso con los datos de código y

nombre.

o Parametrización de los porcentajes de ponderación de cada uno de los cortes.

o Un módulo, donde el docente ingrese la nota por cada curso creado, por cada

corte y por cada estudiante.

o Consulta de las notas parciales y definitivas por estudiante, utilizando el código

como mecanismo de búsqueda.

o Un módulo para la eliminación de un estudiante o de un curso entero.


2

Capítulo 2

Formularios en VBA (UserForm)

Los formularios en VBA o formularios Excel son conocidos como

Userforms, sirven para ejecutar operaciones como el registro, actualización, eliminación

o procesamiento de los datos existentes en Excel, o como una interfaz de usuario desde la

que se pueden ejecutar macros previamente existentes.

Estos formularios en Excel pueden ser empleados desde cualquier hoja, por medio

de algún botón que coloquemos, o desde la alguna Macro existente en Excel, para lo cual

deberemos colocar la invocación

Cuando se desea ejecutar un macro, al ingresar la opción “Macros” desde la ficha

de programador, se muestra una relación de macros que pueden ser empleadas, desde

dicha pantalla no existe más interacción relevante que solo seleccionar cuál de las macros

emplear, en cambio desde un Userform se pueden crear objetos como cajas de texto,

botones de opción, listas, etc, con las cuales se puede interactuar antes de proceder a

ejecutar alguna macro.

El contenido disponible en un Userform puede ser empleado para interactuar con

algún contenido en cualquiera de las hojas que encuentren en nuestro archivo Excel, o

solo interactuar entre los datos disponibles desde el mismo Userform.

La cantidad de usos que le podemos dar a un Userform es muy diverso, en la

siguiente lista encontraremos algunos ejemplos de cómo podemos emplearlos.

.
3

Capítulo 3

¿Cómo crear un Formulario en Excel (UserForm)?

Para crear un formulario en Excel primero se debe ingresar a la Ficha

Programador o Desarrollador, luego de ello seleccionar la opción “Visual Basic”, una vez

que nos encontremos en esta pantalla, sobre la ventana de Proyecto podemos realizar

un Click con el botón derecho y seleccionar “Userform”, o ir al menú “Insertar” y luego

seleccionar “Userform”.

Figura 1.

Luego se ello aparecerá un formulario en Excel en blanco, desde el cual se podrá añadir

los elementos que se consideren necesarios desde el cuadro de herramientas.

Figura 2.
4

Si la ventana de proyectos no aparece puede ir al menú “Ver”, luego seleccionar

“Explorador de Proyectos”, o usar CTRL + R.

En caso una vez creado el formulario no aparezca el cuadro de herramientas, puede ir al

menú “Ver” y luego seleccionar la opción “Cuadro de herramientas”.

Funcionalidad. Los userforms proporcionan un mecanismo para diseñar y desarrollar

interfaces gráfica de usuario basadas en VBA (Visual Basic for Applications) en Excel.
5

Capítulo 4

Cuadros de control del UserForm

A partir de un cuadro comparativo realizaremos una breve explicación de

cada uno de los cuadros de control del UserForm.

Figura 3.

Imagen Nombre Funcion


Seleccionar Objetos Sirve para seleccionar controles que hayamos insertado en el UserForm
Sirve para poner un titulo o un texto.

Ejemplo: Podemos poner un texto del tipo "Complete las opciones a continuación" y
Etiquta Label ubicarlo en cualquier sitio del UserForm.

También podemos agregar títulos o descripciones al resto de comandos que


agreguemos al UserForm.
Sirve para que un usuario introduzca Datos.

Cuadro de Texto (Textbox)


Ejemplo: Querremos que el usuario introduzca una Fecha o un Nombre (Que luego
llevaremos a alguna Celda de Excel).
Sirve para que un usuario elija una opción de una Lista. Ejemplo: creamos una lista con
Cuadro combinado (ComBox)
los meses de Enero a Diciembre para que el usuario elija uno de ellos.
Sirve para que un usuario rellene o elija varias opciones de una lista.

Cuadro de Lista (ListBox)


Ejemplo: Creamos una lista con Regiones o Ciudades y el usuario deberá elegir una o
varias de ellas.
Sirve para que un usuario active una determinada función. Ejemplo: Podemos hacer
Casilla (CheckBox) que al cerrar el UserForm se imprima un reporte solo si la casilla de selección esta
tildada .
Sirve para que un usuario seleccione una opción determinada entre varias
posibilidades.

Botón de Opciones (OptionButton)


Ejemplo: Querremos que el usuario indique, si es del sexo femenino o masculino.

De todas las opciones solo se puede seleccionar una de ellas.


Sirve para activar o desactivar alguna funcionalidad. Este botón adopta el modo
"Encendido"/"Apagado".
Botón de Alternar (ToggleButton)
Ejemplo: Querremos que el usuario defina su idioma, en modo encendido español y en
modo apagado ingles.

Sirve para agrupar elementos de un UserForm (Los elementos se deben ubicar dentro
del Frame (Marco).

Ejemplo: Tenemos varios grupos de OptionButton y para distinguirlo lo agrupamos con


un Frame.
Marco (Frame)

Si tenemos un grupo de opciones tipo Masculino/Femenino, los agrupamos dentro de


un Frame (Marco).

Si luego tenemos otro grupo de opciones del tipo Mayor de Edad/Menor de edad los
agrupamos dentro de otro Frame (Marco).
Es un simple Botón que nos permite ejecutar acciones.
Botón de Comando (CommandButton)
Ejemplo: Un Botón de Ayuda que ejecuta otro UserForm con ayuda para el usuario.
posibilidades.

Botón de Opciones (OptionButton)


Ejemplo: Querremos que el usuario indique, si es del sexo femenino o masculino.

De todas las opciones solo se puede seleccionar una de ellas.


Sirve para activar o desactivar alguna funcionalidad. Este botón adopta el modo
"Encendido"/"Apagado".
Botón de Alternar (ToggleButton)
6
Ejemplo: Querremos que el usuario defina su idioma, en modo encendido español y en
modo apagado ingles.

Sirve para agrupar elementos de un UserForm (Los elementos se deben ubicar dentro
del Frame (Marco).

Ejemplo: Tenemos varios grupos de OptionButton y para distinguirlo lo agrupamos con


un Frame.
Marco (Frame)

Si tenemos un grupo de opciones tipo Masculino/Femenino, los agrupamos dentro de


un Frame (Marco).

Si luego tenemos otro grupo de opciones del tipo Mayor de Edad/Menor de edad los
agrupamos dentro de otro Frame (Marco).
Es un simple Botón que nos permite ejecutar acciones.
Botón de Comando (CommandButton)
Ejemplo: Un Botón de Ayuda que ejecuta otro UserForm con ayuda para el usuario.

En un mismo UserForm se puede crear distintas secciones.

Barra de Tabulaciones (TabSTrip)


Ejemplo: Un UserForm con cuatro secciones: Norte, Sur, Este y Oeste.

Dentro de cada sección podemos ubicar distintos controles.


En un mismo formulario se puede crear distintas paginas.

Página Multiple (MultiPage) Ejemplo: Un UserForm con 2 paginas: Nicaragua y el resto del Mundo.

Dentro de cada pagina podemos ubicar distintos controles o distintas secciones


Si tenemos una lista con muchos elementos el ScrollBar te permite navegarlos.

Barra de Desplazamiento (ScrollBar)


Ejemplo: Tenemos una lista con 150 países, con el ScrollBar podemos subir y bajar por la
lista de los mismos utilizando las flechas de desplazamiento.

Permite aumentar o disminuir valores.


Botón de Numero (SpinButton)
Ejemplo: Tenemos una lista con tipos de interés y querremos que sean incrementadas
o disminuidos en cantidades predeterminadas desde el Botón de Numero.

Permite introducir imágenes en el UserForm.


Imagen (Image)
Ejemplo: Querremos introducir una Fotografía como fondo del Userform para darle un
aspecto mas profesional.
Permite hacer referencia a una celda de Excel.

Ejemplo: Querremos que el usuario seleccione un dato que previamente fue


RefEdit introducido en una celda de Excel.

Haciendo doble clic en cada control se abrirá una ventana donde podremos escribir y
asociarle una Macro.
7

Capítulo 5

Aplicación

Se realizo un aplicación de Cursos donde el Profesor podrá adminstrar; cursos,

estudiantes y calificaciones, esta aplicación amplia de manera interesante nuestro

desarrollo creativo ya que nos da la oportunidad de imaginar y ver todas las posibilidades

de ideas que se puedan aplicar.

Codigo Impreso.

Los codigos que se utilizaron fueron:

En la UserForm CoursesManager

Figura 4.
8

MsgBox "Debe ingresar el codigo del curso"

currentDelete = 0

lblStatusQuery.Caption = "No encontrado"

Else

If indexrow = 0 Then

MsgBox "El codigo ingresado no se encuentra en el sistema "

clearDataDelete

currentDelete = 0

Else

currentDelete = indexrow - 1

lblStatusQuery.Caption = "Encontrado"

lblCod.Caption = txtCodeToDelet.Text

lblName.Caption = tbl.Range.Cells(indexrow, 2)

lblSeats.Caption = tbl.Range.Cells(indexrow, 3)

End If

End If

End Sub

Sub deleteAllStudentsByCourseCode(ByRef codeCourse As String)

Set ws = ThisWorkbook.Worksheets("Cursos")

Dim tbl As ListObject


9

Set tbl = ws.ListObjects("Estudiantes")

For i = tbl.ListRows.Count To 0 Step -1

MsgBox "for " & i

If tbl.Range.Cells(i + 1, 6) = codeCourse Then

tbl.ListRows(i).Delete

End If

Next

End Sub

Private Sub MultiPage1_Change()

End Sub

En la UserForm MainMenu.

Private Sub btnAdminStudents_Click()

Dim StudentsHandlerForm As New StudentsHandler

StudentsHandlerForm.Show

End Sub

Private Sub btnCoursesHandler_Click()


10

Dim CoursesManagerForm As New CoursesManager

CoursesManagerForm.Show

End Sub

Private Sub btnRatings_Click()

Dim RatingsFormP As New RatingsForm

RatingsFormP.Show

End Sub

Private Sub Label1_Click()

End Sub

En la UserForm RatingsForm

Figura 7
11

Public ws As Worksheet

Public currentCourseSelected As Integer

Public currentStudentSelected As Integer

Public currentRatingIndex As Integer

Public currentCourseCode As String


12

Public currentQ1 As Integer

Public currentQ2 As Integer

Public currentQ3 As Integer

Public currentStudenId As String

Public currentRating1 As Double

Public currentRating2 As Double

Public currentRating3 As Double

Public Function validateStudentId(ByRef idStudent As String) As Boolean

Set ws = ThisWorkbook.Worksheets("Cursos")

Dim result As Boolean

result = False

Dim tbl As ListObject

Set tbl = ws.ListObjects("Estudiantes")

For i = 1 To tbl.Range.Cells.Count

If tbl.Range.Cells(i, 1) = idStudent Then

result = True
13

Exit For

End If

Next

validateStudentId = result

End Function

Public Function validateCourse(ByRef codeSourse As String) As Boolean

Set ws = ThisWorkbook.Worksheets("Cursos")

Dim result As Boolean

result = False

Dim tbl As ListObject

Set tbl = ws.ListObjects("Cursos")

For i = 1 To tbl.Range.Cells.Count

If tbl.Range.Cells(i, 1) = codeSourse Then

result = True

Exit For

End If
14

Next

validateCourse = result

End Function

Public Function validateRatingByStudentId(ByRef idStudent As String) As Boolean

Set ws = ThisWorkbook.Worksheets("Cursos")

Dim result As Boolean

result = False

Dim tbl As ListObject

Set tbl = ws.ListObjects("Calificaciones")

For i = 1 To tbl.Range.Cells.Count

If tbl.Range.Cells(i, 2) = idStudent Then

result = True

Exit For

End If

Next

validateRatingByStudentId = result

End Function
15

Public Function getIndexRowByIdStudent(ByRef idStudent As String) As Integer

Set ws = ThisWorkbook.Worksheets("Cursos")

Dim result As Integer

result = 0

Dim tbl As ListObject

Set tbl = ws.ListObjects("Estudiantes")

For i = 1 To tbl.Range.Cells.Count

If tbl.Range.Cells(i, 1) = idStudent Then

result = i

Exit For

End If

Next

getIndexRowByIdStudent = result

End Function

Public Function getIndexRowToCode(ByRef keyWord As String) As Integer

Set ws = ThisWorkbook.Worksheets("Cursos")
16

Dim result As Integer

result = 0

Dim tbl As ListObject

Set tbl = ws.ListObjects("Cursos")

For i = 1 To tbl.Range.Cells.Count

If tbl.Range.Cells(i, 1) = keyWord Then

result = i

Exit For

End If

Next

getIndexRowToCode = result

End Function

Public Function getIndexRowByIdStudentOnRatings(ByRef idStudent As String) As

Integer

Set ws = ThisWorkbook.Worksheets("Cursos")

Dim result As Integer

result = 0
17

Dim tbl As ListObject

Set tbl = ws.ListObjects("Calificaciones")

For i = 1 To tbl.Range.Cells.Count

If tbl.Range.Cells(i, 2) = idStudent Then

result = i

Exit For

End If

Next

getIndexRowByIdStudentOnRatings = result

End Function

Sub clearAllFields()

txtCourseCodeSearch.Text = ""

lblCodeCourse.Caption = ""

lblCourseName.Caption = ""

lblCourseSeats.Caption = ""

currentCourseSelected = 0

currentQ1 = 0

currentQ2 = 0
18

currentQ3 = 0

currentCourseCode = ""

clearStudentFields

studentFrame.Visible = False

End Sub

Sub clearStudentFields()

txtStudentId.Text = ""

lblStudentId.Caption = ""

lblNameStudent.Caption = ""

txt1Q.Text = ""

txt2Q.Text = ""

txt3Q.Text = ""

lblPartialRating.Caption = ""

lblFInalRating.Caption = ""

lblQ1.Caption = ""

lblQ2.Caption = ""

lblQ3.Caption = ""
19

currentStudentSelected = 0

currentStudenId = ""

currentRating1 = 0

currentRating2 = 0

currentRating3 = 0

End Sub

Private Sub btnCancel_Click()

backToMainMenu

End Sub

Sub backToMainMenu()

clearAllFields

Unload Me

End Sub

Private Sub btnClearFields_Click()

clearAllFields

End Sub
20

Private Sub btnCourseSearch_Click()

Set ws = ThisWorkbook.Worksheets("Cursos")

Dim tbl As ListObject

Set tbl = ws.ListObjects("Cursos")

Dim indexrow As Integer

indexrow = getIndexRowToCode(txtCourseCodeSearch.Text)

If txtCourseCodeSearch.Text = "" Then

MsgBox "Debe ingresar el codigo del curso"

currentCourseSelected = 0

clearAllFields

Else

If indexrow = 0 Then

MsgBox "El codigo ingresado no se encuentra en el sistema "

clearAllFields

currentDelete = 0

Else

currentCourseSelected = indexrow - 1

lblCodeCourse.Caption = txtCourseCodeSearch.Text

lblCourseName.Caption = tbl.Range.Cells(indexrow, 2)

lblCourseSeats.Caption = tbl.Range.Cells(indexrow, 3)
21

currentCourseCode = txtCourseCodeSearch.Text

currentQ1 = CInt(tbl.Range.Cells(indexrow, 4))

currentQ2 = CInt(tbl.Range.Cells(indexrow, 5))

currentQ3 = CInt(tbl.Range.Cells(indexrow, 6))

studentFrame.Visible = True

End If

End If

End Sub

Private Sub btnSearchStudent_Click()

Set ws = ThisWorkbook.Worksheets("Cursos")

Dim tbl As ListObject

Set tbl = ws.ListObjects("Estudiantes")

Dim indexrow As Integer

indexrow = getIndexRowByIdStudent(txtStudentId.Text)

If txtStudentId.Text = "" Then


22

MsgBox "Debe ingresar la cedula del estudiante"

currentStudentSelected = 0

clearStudentFields

Else

If indexrow = 0 Then

MsgBox "El numero de cedula no se encuentra registrado"

currentStudentSelected = 0

clearStudentFields

Else

If tbl.Range.Cells(indexrow, 6) = currentCourseCode Then

currentStudenId = txtStudentId.Text

currentStudentSelected = indexrow - 1

lblStudentId.Caption = currentStudenId

lblNameStudent.Caption = tbl.Range.Cells(indexrow, 2) & " " &

tbl.Range.Cells(indexrow, 3)

lblQ1.Caption = currentQ1 & "%"

lblQ2.Caption = currentQ2 & "%"

lblQ3.Caption = currentQ3 & "%"

getAndShowRatings

Else

MsgBox "Este estudiante no esta registrado en el curso seleccionado"


23

currentStudentSelected = 0

clearStudentFields

End If

End If

End If

End Sub

Sub getAndShowRatings()

Dim tbl As ListObject

Set tbl = ws.ListObjects("Estudiantes")

currentStudentsHasARatingRow = validateRatingByStudentId(currentStudenId)

If currentStudentsHasARatingRow Then

Set tbl = ws.ListObjects("Calificaciones")

currentRatingIndex = getIndexRowByIdStudentOnRatings(currentStudenId)

If currentStudenId <> "" Then

currentRating1 = tbl.Range.Cells(currentRatingIndex, 4)

currentRating2 = tbl.Range.Cells(currentRatingIndex, 5)

currentRating3 = tbl.Range.Cells(currentRatingIndex, 6)

txt1Q = currentRating1

txt2Q = currentRating2
24

txt3Q = currentRating3

Dim final1 As Double

Dim final2 As Double

Dim final3 As Double

Dim factorPartial As Double

If currentRating1 <> 0 Then

final1 = ((5 * currentQ1) * (currentRating1 / 5)) / 100

Else

factorPartial = (5 * currentQ1) / 100

End If

If currentRating2 <> 0 Then

final2 = ((5 * currentQ2) * (currentRating2 / 5)) / 100

Else

factorPartial = (5 * currentQ2) / 100

End If

If currentRating3 <> 0 Then


25

final3 = ((5 * currentQ3) * (currentRating3 / 5)) / 100

Else

factorPartial = (5 * currentQ3) / 100

End If

lblPartialRating.Caption = (final1 + final2 + final3) + factorPartial

lblFInalRating = (final1 + final2 + final3)

Else

MsgBox "Debe seleccionar datos del surso y estudiante " + currentStudenId

End If

End If

End Sub

Private Sub btnUpdate_Click()

Set ws = ThisWorkbook.Worksheets("Cursos")

Dim tbl As ListObject

Set tbl = ws.ListObjects("Calificaciones")

currentRating1 = getOnlyDouble(txt1Q.Text)

currentRating2 = getOnlyDouble(txt2Q.Text)
26

currentRating3 = getOnlyDouble(txt3Q.Text)

currentRatingIndex = getIndexRowByIdStudentOnRatings(currentStudenId)

If currentRatingIndex <> 0 Then

tbl.Range.Cells(currentRatingIndex, 4) = currentRating1

tbl.Range.Cells(currentRatingIndex, 5) = currentRating2

tbl.Range.Cells(currentRatingIndex, 6) = currentRating3

getAndShowRatings

Else

If currentStudenId <> "" Then

Set tbl = ws.ListObjects("Calificaciones")

Dim newrow As ListRow

Set newrow = tbl.ListRows.Add

With newrow

.Range(2) = currentStudenId
27

.Range(3) = currentCourseCode

.Range(4) = currentRating1

.Range(5) = currentRating3

.Range(6) = currentRating3

End With

getAndShowRatings

Else

MsgBox "Debe seleccionar un estudiante y un curso valido"

End If

End If

End Sub

Function getOnlyDouble(ByRef value As String) As Double

Dim result As Double

If value = "" Or value = Null Then

result = 0

Else
28

If IsNumeric(value) <> False Then

result = CDbl(value)

Else

MsgBox "Solo se permiten campos numericos para las notas de corte"

result = 0

End If

End If

getOnlyDouble = result

End Function

Private Sub txtCourseCodeSearch_Change()

End Sub

En la UserForm StudentsHandler

Figura 7
29

Dim ws As Worksheet

Public currentDelete As Integer

Private Sub btnAddSTudent_Click()

Dim allRigth As Boolean


30

allRigth = True

Dim idStudent As String

Dim name As String

Dim lastName As String

Dim phone As String

Dim email As String

Dim course As String

idStudent = txtIdStudent.Text

name = txtName.Text

lastName = txtLastName.Text

phone = txtPhone.Text

email = txtEmail.Text

course = txtCourse.Text

Set ws = ThisWorkbook.Worksheets("Cursos")

ws.Activate

Dim tbl As ListObject

Set tbl = ws.ListObjects("Cursos")


31

If idStudent = "" Or name = "" Or lastName = "" Or phone = "" Or email = "" Or course =

"" Then

allRigth = False

MsgBox "Ningun Campo debe estar vacio"

Else

If IsNumeric(idStudent) = False Then

allRigth = False

MsgBox "La cedula del estudiante debe contener numeros unicamente"

End If

If IsNumeric(txtPhone) = False Then

allRigth = False

MsgBox "El telefono del estudiante debe contener numeros unicamente"

End If

If validateStudentId(idStudent) Then

MsgBox "Este estudiante ya se encuentra registrado"

allRigth = False

End If

If validateCourse(course) = False Then

MsgBox "El curso al que intenta inscribir al estudiante no existe"


32

allRigth = False

End If

Dim maxSeats As Integer

maxSeats = getMaxSeatsByCourse(course)

If maxSeats = 0 Then

MsgBox "Ha ocurrido un error, verifique los datos"

allRigth = False

Else

If getStudentOnCourse(course) >= maxSeats Then

MsgBox "Ha inscrito el numero maximo de estudiantes para este curso"

allRigth = False

End If

End If

End If

Set tbl = ws.ListObjects("Estudiantes")


33

Dim newrow As ListRow

If allRigth Then

Set newrow = tbl.ListRows.Add

With newrow

.Range(1) = idStudent

.Range(2) = name

.Range(3) = lastName

.Range(4) = phone

.Range(5) = email

.Range(6) = course

End With

clearFormToAddStudentTab

End If

End Sub

Public Function validateStudentId(ByRef idStudent As String) As Boolean

Set ws = ThisWorkbook.Worksheets("Cursos")

Dim result As Boolean

result = False
34

Dim tbl As ListObject

Set tbl = ws.ListObjects("Estudiantes")

For i = 1 To tbl.Range.Cells.Count

If tbl.Range.Cells(i, 1) = idStudent Then

result = True

Exit For

End If

Next

validateStudentId = result

End Function

Public Function getMaxSeatsByCourse(ByRef codeCourse As String) As Integer

Set ws = ThisWorkbook.Worksheets("Cursos")

Dim result As Integer

result = 0

Dim tbl As ListObject

Set tbl = ws.ListObjects("Cursos")


35

For i = 1 To tbl.Range.Cells.Count

If tbl.Range.Cells(i, 1) = codeCourse Then

result = tbl.Range.Cells(i, 3)

Exit For

End If

Next

getMaxSeatsByCourse = result

End Function

Public Function getStudentOnCourse(ByRef codeCourse As String) As Integer

Set ws = ThisWorkbook.Worksheets("Cursos")

Dim result As Integer

result = 0

Dim tbl As ListObject

Set tbl = ws.ListObjects("Estudiantes")

For i = 1 To tbl.Range.Cells.Count

If tbl.Range.Cells(i, 6) = codeCourse Then

result = result + 1
36

End If

Next

getStudentOnCourse = result

End Function

Public Function validateCourse(ByRef codeSourse As String) As Boolean

Set ws = ThisWorkbook.Worksheets("Cursos")

Dim result As Boolean

result = False

Dim tbl As ListObject

Set tbl = ws.ListObjects("Cursos")

For i = 1 To tbl.Range.Cells.Count

If tbl.Range.Cells(i, 1) = codeSourse Then

result = True

Exit For

End If

Next
37

validateCourse = result

End Function

Public Sub clearFormToAddStudentTab()

txtIdStudent.Text = ""

txtName.Text = ""

txtLastName.Text = ""

txtPhone.Text = ""

txtEmail.Text = ""

txtCourse.Text = ""

End Sub

Public Sub clearSerchFields()

lblStatusQuery.Caption = ""

lblIdStudent.Caption = ""

lblNameStudent.Caption = ""

lblCourseStudent.Caption = ""

txtIdStudentSerch.Text = ""

End Sub

Private Sub btnCancelAddStudent_Click()

backMainMenu
38

End Sub

Public Sub backMainMenu()

clearFormToAddStudentTab

clearSerchFields

Unload Me

End Sub

Private Sub btnCancelDelete_Click()

backMainMenu

End Sub

Private Sub btnClearAddStudent_Click()

clearFormToAddStudentTab

End Sub

Public Function getIndexRowByIdStudent(ByRef idStudent As String) As Integer

Set ws = ThisWorkbook.Worksheets("Cursos")

Dim result As Integer


39

result = 0

Dim tbl As ListObject

Set tbl = ws.ListObjects("Estudiantes")

For i = 1 To tbl.Range.Cells.Count

If tbl.Range.Cells(i, 1) = idStudent Then

result = i

Exit For

End If

Next

getIndexRowByIdStudent = result

End Function

Private Sub btnDeleteStudent_Click()

Set ws = ThisWorkbook.Worksheets("Cursos")

Dim tbl As ListObject

Set tbl = ws.ListObjects("Estudiantes")

If currentDelete <> 0 Or currentDelete <> Null Then


40

tbl.ListRows(currentDelete).Delete

clearSerchFields

currentDelete = 0

Else

MsgBox "No se ha seleccionado un estudiante "

clearSerchFields

End If

End Sub

Private Sub btnSerchById_Click()

Set ws = ThisWorkbook.Worksheets("Cursos")

Dim tbl As ListObject

Set tbl = ws.ListObjects("Estudiantes")

Dim indexrow As Integer

indexrow = getIndexRowByIdStudent(txtIdStudentSerch.Text)

If txtIdStudentSerch.Text = "" Then

MsgBox "Debe ingresar la cedula del estudiante"

currentDelete = 0
41

lblStatusQuery.Caption = "No encontrado"

clearSerchFields

Else

If indexrow = 0 Then

MsgBox "El numero de cedula no se encuentra registrado"

currentDelete = 0

clearSerchFields

Else

currentDelete = indexrow - 1

lblStatusQuery.Caption = "Encontrado"

lblIdStudent.Caption = txtIdStudentSerch.Text

lblNameStudent.Caption = tbl.Range.Cells(indexrow, 2) & " " &

tbl.Range.Cells(indexrow, 3)

lblCourseStudent.Caption = tbl.Range.Cells(indexrow, 6)

End If

End If

End Sub

Private Sub txtIdStudent_Change()

End Sub
42

Private Sub UserForm_Click()

End Sub

Título 4. Las figuras pueden estar blanco y negro o a color. Si se usa color se

debe asegurar que la figura tenga sentido si se imprime a blanco y negro.En la figura 1 se

muestran algunas formas.


43

Lista de referencias

https://www.excel-avanzado.com/userform-en-excel

https://aplicaexcelcontable.com/blog/programar-en-excel-controles-de-un-userform.html

Вам также может понравиться