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