Copiar hojas con selección previa

como podría copiar unas hojas de excel a un nuevo libro  varias veces, ejemplo  en un form tengo los nombres de las hojas (hoja1, hoja2, hoja3,hojan) y que están tengan un text que yo les pueda introducir un valor numérico que sea este el numero de veces que se debe copiar dicha hoja, y si el valor es cero o vacío no copie dicha hoja.

saludos desde venezuela

1 Respuesta

Respuesta
1

Te dejo un par de códigos que pueden ayudarte en tu tarea. Juntos hacen lo que necesitas, solo que usando una hoja de Excel en vez de un userform (a cuyos objetos hay que referirse por sus nombres específicos, que para este caso desconozco). Puedes modificarlos para hacerlos funcionar con el userform o usarlos directamente desde la hoja de Excel

El primer código, lista los nombres de las hojas del libro actual

Sub ListarHojas()
''Creada por FSerrano en 120302
''Para edlsalv en TodoExpertos.com
''Lista las hojas del libro actual en una hoja nueva llamada Listado insertada al comienzo del libro
ActiveWorkbook.Sheets(1).Activate
ActiveWorkbook.Sheets.Add.Name = "Listado"
For Each Sheet In ActiveWorkbook.Sheets
    If Sheet.Name <> ActiveSheet.Name Then
        Cells(Application.WorksheetFunction.CountA(ActiveSheet.Range("A:A"))+ 1, 1) = Sheet.Name
End If
Next Sheet
End Sub

Luego de correr este código tendrás el listado con los nombres de las hojas del libro actual (puedes eliminar las que no quieras procesar); debes añadir en la columna B el número de veces que quieres que cada hoja sea replicada en un libro nuevo que se creara automáticamente y quedará activo al final del proceso; para lograr eso, corre este código

Sub ReplicarHojas()
''Creada por FSerrano en 120302
''Para edlsalv en TodoExpertos.com
''Replica, en un libro nuevo, una hoja el número de veces indicada
''El libro origen debe contener una hoja llamada LISTADO, en la cual estan los nombres de las hojas y el número de replicas deseado
'Captura el nombre del libro de recurso
LibroBase = ActiveWorkbook.Name
'Añade un nuevo libro, captura su nombre y el número de hojas iniciales, para eliminarlas al final
Workbooks.Add
LibroReplicas = ActiveWorkbook.Name
HojasInicio = ActiveWorkbook.Sheets.Count
'Bucle de copia, copia la hoja al final del libro
For i = 1 To Application.WorksheetFunction.CountA(Workbooks(LibroBase).Sheets("Listado").Range("A:A"))
    For j = 1 To Workbooks(LibroBase).Sheets("Listado").Cells(i, 2)
        Workbooks(LibroBase).Sheets("" & Workbooks(LibroBase).Sheets("Listado").Cells(i, 1) & "").Copy After:=Workbooks(LibroReplicas).Sheets(Workbooks(LibroReplicas).Sheets.Count)
    Next
Next
'suspende los avisos de notificación
Application.DisplayAlerts = False
'Elimina las hojas que el libro añade por defecto, esto es: las que no fueron replicadas
For i = 1 To HojasInicio
    Workbooks(LibroReplicas).Sheets(i).Delete
Next
End Sub

Si entendí bien tu pregunta, esto constituye la esencia de lo que necesitas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas