Copie un rango de hojas de la Hoja "Portada" a Hojas. Cuente en un nuevo libro de trabajo

Copie un rango de hojas de la Hoja "Portada" a Hojas. Cuente en un nuevo libro de trabajo

Estoy intentando crear una versión del libro de trabajo "amigable para el cliente" que incluirá todas las pestañas desde "Portada_Hoja" hasta la hoja final. El libro de trabajo tiene una macro para copiar la hoja de "valores" varias veces, cambiándole el nombre cada vez consecutivamente, por ejemplo, valor2, valor3, etc., por lo tanto.

No sé cuántas hojas será necesario copiar y quiero utilizar la Sheets.Countfunción. El libro de trabajo solo me da la portada y la pestaña de valor final.

He estado intentando utilizar lo siguiente:

Sub Activate_Sheet()
    Sheets("Cover_Sheet").Activate
End Sub

Sub ExportExcelWorkbookFinal()
' ----------------------------
' Macro to export the workbook and break the links
' which allows it to be sent on to clients.

    Application.ScreenUpdating = False
    Sheets(Array("Cover_Sheet", Sheets.Count)).Copy
    ActiveSheet.Protect "password"
    Application.ScreenUpdating = True
    Application.GetSaveAsFilename
   
End Sub

Respuesta1

Solo obtienes la "portada" y la pestaña "valor final" porque le estás indicando que copie Cover_Sheetsy Sheets.Count.
Sheets.Countdevolverá el número de hojas del libro de trabajo.
Entonces, si tiene 5 hojas, su código dice; Copie Cover_Sheetsy 5, 5interpretándose como la quinta hoja, ergo su última hoja.

No estoy del todo seguro de lo que quieres decir exactamente, pero supongo que tienes una macro diferente que crea las otras pestañas de valores. Si desea copiar todas las hojas, comenzando con Cover_Sheetsy hasta el final, puede crear esa matriz primero y luego usar lo que tiene.
Utilizo el índice de Cover_Sheetcomo punto de partida y llego hasta Sheets.Count.

Sub ExportExcelWorkbookFinal()
'
' Macro to export the workbook and break the links which allows it to be sent on to clients.

Dim sheetArr As Variant
sheetArr = Evaluate("TRANSPOSE(Row(" & Application.Sheets("Cover_Sheet").Index & ":" & Sheets.Count & "))")

Application.ScreenUpdating = False
    Sheets(sheetArr).Copy
    ActiveSheet.Protect "password"
    Application.ScreenUpdating = True
    Application.GetSaveAsFilename
   
End Sub

Sin embargo, esto solo establecerá una contraseña en la primera hoja del nuevo libro, Cover_Sheet. No estoy seguro si eso es un problema, ya que no lo mencionaste. Pero si es así, simplemente reemplácelo ActiveSheet.Protect "password"con lo siguiente:

For Each wsheet In ActiveWorkbook.Worksheets
    wsheet.Protect Password:="password"
Next wsheet

También puedes llenar la matriz de la forma más "normal", con un bucle, pero ese enfoque de una sola línea me parece interesante.

Dim i As Long, sheetArr() As Variant
ReDim sheetArr(Application.Sheets("Cover_Sheet").Index To Sheets.Count)
For i = LBound(sheetArr) To UBound(sheetArr)
    sheetArr(i) = i
Next

información relacionada