### Objetivo General Automatizar la gestión de situaciones académicas de alumnos en una hoja de cálculo de Excel utilizando VBA, respetando una estructura modular y el uso de parámetros. ### Restricciones Importantes - **Prohibido el acceso directo a celdas desde módulos:** Todas las operaciones deben realizarse a través de procedimientos y funciones parametrizadas. - **Estructura modular:** Uso de repositorios/módulos para eventos, procedimientos parametrizados y funciones parametrizadas. ### Estructura de Datos (Hoja de Cálculo) Se trabaja con una matriz de datos que incluye: - **Columna B:** ALUMNO - **Columna C:** CALIFICACION (Valor numérico) - **Columna D:** SITUACION (Texto generado por VBA) - **Columna E:** INSERTAR SITUACION (Botón/Evento) - **Columna F:** ANALISIS VISUAL (Botón/Evento) - **Columna G:** BORRAR SITUACION (Botón/Evento) La lógica de situación académica es: - **BAJO:** ` ### Funciones Clave y Procedimientos #### 1. Función `Situacion` (Función Parametrizada) Genera la situación académica del alumno basándose en su calificación. ```vba Public Function Situacion(calif As Single) As String If calif > 0 And calif #### 2. Procedimiento `Navegacion` (Procedimiento Parametrizado) Recorre la matriz de alumnos y, para cada uno, llama a la función `Situacion` para insertar el resultado en la columna "SITUACION". ```vba Public Sub Navegacion(Fila As Integer, ColEst As Integer, ColCalf As Integer, ColSit As Integer) Do Until Cells(Fila, ColEst) = "" ' Recorre hasta encontrar una celda vacía en la columna de Estudiantes Cells(Fila, ColSit) = ModuloTercero.Situacion(Cells(Fila, ColCalf)) Fila = Fila + 1 Loop End Sub ``` - **Parámetros:** - `Fila` (Integer): Fila inicial para comenzar el recorrido. - `ColEst` (Integer): Columna de los nombres de los estudiantes (para la condición de fin de bucle). - `ColCalf` (Integer): Columna de las calificaciones. - `ColSit` (Integer): Columna donde se insertará la situación académica. - **Lógica:** Itera fila por fila, lee la calificación, llama a `Situacion` y escribe el resultado. #### 3. Procedimiento `AnalisisVisual` (Procedimiento Parametrizado) Realiza un análisis visual de la situación académica asignando colores a las celdas según el estado. ```vba Public Sub AnalisisVisual(Fil As Integer, Col As Integer, ColCalf As Integer, ColSit As Integer) Dim Fila As Integer Dim FilaFinal As Integer FilaFinal = Cells(Fil, Col).End(xlDown).Row ' Encuentra la última fila con datos For Fila = Fil To FilaFinal If Cells(Fila, ColSit) <> "" Then ' Solo si la celda de situación no está vacía Select Case Cells(Fila, ColCalf) ' Usa la calificación para decidir el color Case Is #### 4. Procedimiento `BorradoInformacion` (Procedimiento Parametrizado) Borra la situación académica y el análisis visual (colores) de la tabla. ```vba Public Sub BorradoInformacion(Fil As Integer, Col As Integer, ColSit As Integer) Dim Fila As Integer Dim FilaFinal As Integer FilaFinal = Cells(Fil, Col).End(xlDown).Row ' Encuentra la última fila con datos For Fila = Fil To FilaFinal Cells(Fila, ColSit) = "" ' Borra el texto de la situación Cells(Fila, ColSit).Interior.Color = xlNone ' Borra el color de fondo Next End Sub ``` - **Parámetros:** `Fil` (Fila inicial), `Col` (Columna para encontrar última fila), `ColSit` (Columna de situación). - **Lógica:** Itera por las filas, borra el contenido de la celda de situación y restablece su color de fondo a `xlNone` (sin color). ### 5. Eventos (Asignación a Controles) Los procedimientos parametrizados se disparan mediante eventos asociados a controles (botones) en la hoja de cálculo. Los ejemplos muestran: ```vba ' Evento para el botón de Análisis Visual Private Sub cmdAnalisis_Click() ModuloTercero.AnalisisVisual 3, 2, 3, 4 ' Fila inicial 3, Columna de Estudiantes 2, Columna de Calificación 3, Columna de Situación 4 End Sub ' Evento para el botón de Borrado de Información Private Sub cmdBorrar_Click() ModuloTercero.BorradoInformacion 3, 2, 4 ' Fila inicial 3, Columna de Estudiantes 2, Columna de Situación 4 End Sub ' Evento para el botón de Insertar Situación Private Sub cmdInsertarSit_Click() ModuloTercero.Navegacion 3, 2, 3, 4 ' Fila inicial 3, Columna de Estudiantes 2, Columna de Calificación 3, Columna de Situación 4 End Sub ``` - Se asume que los botones tienen nombres como `cmdAnalisis`, `cmdBorrar`, `cmdInsertarSit`. - Los números pasados como argumentos son los índices de fila y columna (Fila inicial, Columna de Estudiantes, Columna de Calificación, Columna de Situación). - `3` es la fila donde comienzan los datos de los alumnos. - `2` es la columna B (ALUMNO). - `3` es la columna C (CALIFICACION). - `4` es la columna D (SITUACION). ### `ModuloTercero` Todos los procedimientos y funciones `Public` deben estar definidos dentro de un módulo estándar (ej. `ModuloTercero`) para ser accesibles desde los eventos de la hoja. ### Consideraciones Adicionales - **`Option Explicit`:** Siempre se recomienda usarlo al principio de cada módulo para forzar la declaración de variables y evitar errores comunes. - **`End(xlDown).Row`:** Se usa para encontrar la última fila con datos en una columna, lo que hace el código más robusto ante cambios en el número de alumnos. - **Parametrización:** Es crucial entender cómo los parámetros (`Fila`, `ColEst`, `ColCalf`, `ColSit`) permiten que los procedimientos sean genéricos y reutilizables sin codificar celdas específicas.