Macro que copia a otra hoja con condición quiero que copie a otro libro

Tengo un libro con una hoja "Registros", el cual contiene un listado de 500 alumnos, con números de teléfono, e-mail, a que turno van, etc. Y luego tengo hojas de asistencia "Baile", "Basquet", "Futbol", etc... En cada una de estas hojas de asistencia tengo un botón que llama solo 2 datos (nombre y apellido y grado), según la actividad que haga. En baile la macro solo llama a las alumnas que hacen baile, en básquet lo mismo.

El problema es que tengo todas las hojas en un solo libro, y necesito que "Registros" quede separado en un libro y las listas de asistencia en otro. Y me estoy volviendo loco con el objeto workbook pero no encuentro la forma.

Paso la macro que funciona y que lleva datos con condiciones de una hoja a otra en el mismo archivo.

Sub ActualizaFutbolInicialTM()
    Dim titulo As String
    Dim autor As String
    Dim nombre As String
    Dim pais As String
    Dim idioma As String
    Dim genero As String
    Dim ultimaFila As Long
    Dim ultimaFilaAuxiliar As Long
    Dim cont As Long
    Dim palabraBusqueda As String
    palabraBusqueda = Sheets("FUTBOL-I-TM").Cells(1, 2)
    palabraBusqueda = "*" & palabraBusqueda & "*"
    turno = Sheets("FUTBOL-I-TM").Cells(2, 3)
    nivel = Sheets("FUTBOL-I-TM").Cells(3, 3)
    ultimaFila = Sheets("Registros").Range("B" & Rows.Count).End(xlUp).Row
    If ultimaFila < 6 Then
        Exit Sub
    End If
    For cont = 6 To ultimaFila
            If Sheets("Registros").Cells(cont, 11) Like palabraBusqueda And Sheets("Registros").Cells(cont, 5) Like turno And Sheets("Registros").Cells(cont, 6) Like nivel Then
            ID = Sheets("Registros").Cells(cont, 2)
            nombre = Sheets("Registros").Cells(cont, 4)
            seccion = Sheets("Registros").Cells(cont, 7)
                ultimaFilaAuxiliar = Sheets("FUTBOL-I-TM").Range("B" & Rows.Count).End(xlUp).Row
            Sheets("FUTBOL-I-TM").Cells(ultimaFilaAuxiliar + 1, 1) = ID
            Sheets("FUTBOL-I-TM").Cells(ultimaFilaAuxiliar + 1, 2) = nombre
            Sheets("FUTBOL-I-TM").Cells(ultimaFilaAuxiliar + 1, 3) = seccion
        End If
    Next cont
    ultimaFilaAuxiliar = Sheets("FUTBOL-I-TM").Range("B" & Rows.Count).End(xlUp).Row
    With Sheets("FUTBOL-I-TM").Range("B6:G" & ultimaFilaAuxiliar).Font
        .Name = "Arial"
        .Size = 11
        .Italic = False
    End With
    MsgBox "Proceso terminado", vbInformation, "Resultado"
End Sub

1 respuesta

Respuesta
2

Te dejo el ajuste considerando que el libro Registro ya estará abierto junto con el de las hojas.

Set wbR = Workbooks("REGISTROS.xlsx")   'ajusta nombre y extensión

ultimaFila = wbR.Sheets("Registros").Range("B" & Rows.Count).End(xlUp).Row

Y del mismo modo agrega la variable wbR en cada llamada a Sheets("Registros").......

Ajusta el nombre de la hoja si hiciera falta.

Lo intenté pero me dice que el sub indice esta fuera del intervalo, también lo intenté haciendo una ruta pero me dice que el archivo no existe o esta eliminado.

En primer lugar no es necesario que valores mientras aún estamos tratando el tema... quizás luego merezca algo más que un 'bueno'.

Hace más de 10 años que respondo aquí y siempre envío las macros probadas.

Si te está dando error los motivos pueden ser varios (nombre de libro, no lo tenés abierto en la misma instancia que el otro libro, error en la extensión, etc).

Así que reitero lo dicho al inicio:

El libro Registro ya estará abierto junto con el de las hojas.

Si necesitarás buscar y abrir el libro cada vez que ejecutes esta macro, dejame indicada la ruta y el nombre del libro para que te pase las instrucciones necesarias.

Sdos!

Probalo de nuevo (luego de revisar que todas las referencias son correctas: nombre de libro, de hoja, etc). Si te devuelve algún error presiona el botón Depurar y captura la imagen del Editor con la línea señalada de color.

Subila aquí o envíamela a algunos de mis correos.

Sdos!

Estimada Elsa, no he podido completar la macro. Le adjunto la captura de pantalla y los archivos para que vea el funcionamiento.

Archivos:

https://drive.google.com/drive/folders/1_L5bNAQe_b_ao3RTO9wvd9ZtwfyV-ZI0?usp=sharing 

Tus macros (la de la consulta inicial y la de la imagen) se encuentran en libro: APP CLUB CADS.

Y tu consulta dice: tengo todas las hojas en un solo libro, y necesito que "Registros" quede separado en un libro y las listas de asistencia en otro

Entonces, lo que se entiende, es que cada vez que envías información a la hoja "Registros"... esa hoja estará en otro libro y en mi ejemplo lo llamé REGISTROS.

Por eso, en mi ejemplo, declaré una variable Set wbR = Workbooks("REGISTROS.xlsx")  y la hoja de este libro también se sigue llamando "Registros". De ese modo, estando los 2 libros abiertos en la misma instancia, no hay necesidad de seleccionar el libro-hoja destino sino solamente se le indica con algo como:

ID = wbR.Sheets("Registros").Cells(cont, 2)

Pero resulta que me envias el segundo libro que contiene 3 hojas y ninguna con el nombre Registro. Y lo primero que debieras resolver o aclarar es cuál de ellas es la que corresponde a Registro de tu otro libro..... o el libro tendrá varias hojas Registro ?

Entonces y considerando que esta consulta ya está muy extensa (y valorada hasta aquí) te pediré que inicies una nueva consulta y dejes las siguientes aclaraciones:

1- Desde qué libro se ejecutarán las macros. Las encuentro en los 2 libros pero del modo en que están desarrolladas seguiría ejecutándolas desde el libro APP CLUB

2- Si el libro destino estará también abierto o hay que abrirlo para realizar el pase. En este caso si se puede considerar que se encuentran en la misma carpeta. Sino indicar la ruta o si el programa debe permitirte navegar para buscarlo.

3- Si no hay una sola hoja Registro, confirma si todas las macros de Futbol deben ir a la hoja Futbol y así con el resto.

Nota: el error en la macro de tu imagen (ejecutada desde el libro Asistencia) es porque tu libro se llama APP CLUB CADS.xlsm y fijate cómo aparece en tu instrucción:

Set wbR = Workbooks("APPCLUBCADS.xlsx")      'ajusta nombre y extensión

Cuando tengas la otra consulta podés dejarme aquí el enlace para que reciba el mensaje o comenzá el texto con la frase: Para Elsamatilde.

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas