En 2019, en los CEPA todavía no funcionaba raíces. En el nuestro, la gestión de alumnos se realizaba a través de hojas de cálculo de cloud de educamadrid.
La obtención de información de los alumnos por los tutores se realizaba con “fichas” en un libro Excel para cada grupo (“Fichas - Nv2T.xlsx”), donde cada hoja contenía los datos de un alumno.
Por otro lado, los profesores del nivel teníamos un documento con los datos de matriculación (nombre, apellidos, contacto, asignaturas matriculadas y pendientes), llamado “Alumnos de presencial.xlsx”.
Para asegurarme de que los datos iniciales que conocíamos de los alumnos estuvieran en las fichas desde las que se recogía información, programé esta macro en office 365 (versión de 2019).
Aunque ese sistema ha pasado a estar obsoleto desde que disponemos de gestión con raíces, dejo aquí la macro por si le sirve a alguien que esté usando “fichas” en hojas de Excel (aunque lo suyo sería hacer una lista en Excel, generar correspondencia combinada en Word y recoger los datos adicionales sobre el fichero generado en Word).
Attribute VB_Name = "ActualizarFichasAlumnosDesdeListaDeGrupo-MacroEXCEL" 'Esta es una macro de excel y requiere Excel. Las macros de OpenOffice son muy complicadas Sub Rellenar() 'Nombre del archivo que contiene las fichas. SIN XLSX, (debe estar ya abierto) Const nombreArchivoFichas = "Fichas - Nv2T" 'Nombre del archivo que contiene las listas de alumnos Const nombreArchivoDatos = "..\Alumnos de presencial.xlsx" 'Direcciones de los datos en la hoja de cálculo ' que contiene las fichas de alumno Dim fiNombre As String: fiNombre = "$B$2" Dim fiApellidos As String: fiApellidos = "$B$1" Dim FiTelefono As String: FiTelefono = "$B$3" Dim fiCorreo As String: fiCorreo = "$C$4" Dim fiPendiente As String: fiPendiente = "$D$9" Dim fiRefuerzoM As String: fiRefuerzoM = "$D$19" Dim fiRefuerzoL As String: fiRefuerzoL = "$H$19" 'Direcciones de datos en la hoja de datos ' que contiene las listas de alumnos Dim daNombre As String: daNombre = "$A:$A" Dim daApellidos As String: daApellidos = daNombre ' $A contiene Apellidos, Nombre Dim daTelefono As String: daTelefono = "$J:$J" Dim daCorreo As String: daCorreo = "$K:$K" Dim daPendiente As String: daPendiente = "$I:$I" Dim daRefuerzoM As String: daRefuerzoM = "$D:$D" Dim daRefuerzoL As String: daRefuerzoL = "$E:$E" Dim daNP As String: daNP = "$B:$B" Dim Fichas As Workbook, datos As Workbook Dim ficha As Worksheet, hojadatos As Worksheet Dim RFind As Range, Rin As Range Dim NombreApellidos As String, Nombre As String, Apellidos As String Dim fila As Integer Dim i As Integer Set datos = Workbooks.Open(nombreArchivoDatos, ReadOnly:=True) For Each ficha In Workbooks(nombreArchivoFichas).Worksheets For Each hojadatos In datos.Sheets Set RFind = hojadatos.Range(daNP).Find(ficha.Name, LookIn:=xlValues) If Not (RFind Is Nothing) Then Exit For End If Next If RFind Is Nothing Then Debug.Print "NP: " + ficha.Name + " No está en " + datos.Name Else Debug.Print "NP: " + ficha.Name + " Está en " + hojadatos.Name fila = RFind.Row '****** NOMBRE Y APELLIDOS NombreApellidos = hojadatos.Range(daNombre).Rows(fila) i = InStr(NombreApellidos, ",") If i > 1 Then Nombre = Trim(Mid(NombreApellidos, i + 1)) Apellidos = Trim(Left(NombreApellidos, i - 1)) Else Nombre = NombreApellidos Apellidos = NombreApellidos End If If ficha.Range(fiNombre) = "" Then ficha.Range(fiNombre) = Nombre End If If ficha.Range(fiApellidos) = "" Then ficha.Range(fiApellidos) = Apellidos End If '****** RESTO DE DATOS actualizaSimple ficha.Range(FiTelefono), hojadatos.Range(daTelefono).Rows(fila) actualizaSimple ficha.Range(fiCorreo), hojadatos.Range(daCorreo).Rows(fila) actualizaSimple ficha.Range(fiPendiente), hojadatos.Range(daPendiente).Rows(fila) actualizaSimple ficha.Range(fiRefuerzoM), hojadatos.Range(daRefuerzoM).Rows(fila) actualizaSimple ficha.Range(fiRefuerzoL), hojadatos.Range(daRefuerzoL).Rows(fila) End If Next End Sub Sub actualizaSimple(rangoSalida As Range, rangoEntrada As Range) 'rangoSalida debe estar vacío. 'rangoEntrada debe estar lleno. If rangoSalida = "" Then If rangoEntrada > "" Then rangoSalida = rangoEntrada End If End If End Sub