Apagada docs

Aprendiendo a programar el pasado

Herramientas de usuario

Herramientas del sitio


es:basic:vba:actualizar_fichas_alumnos_desde_lista_de_grupo
ActualizarFichasAlumnosDesdeListaDeGrupo (Macro Excel)

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).

ActualizarFichasAlumnosDesdeListaDeGrupo-MacroEXCEL.bas
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
Este sitio web utiliza cookies. Al utilizar el sitio web, usted acepta almacenar cookies en su computadora. También reconoce que ha leído y entendido nuestra Política de privacidad. Si no está de acuerdo abandone el sitio web.Más información
es/basic/vba/actualizar_fichas_alumnos_desde_lista_de_grupo.txt · Última modificación: 2022/07/01 02:21 por nepenthes