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.Count
funció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_Sheets
y Sheets.Count
.
Sheets.Count
devolverá el número de hojas del libro de trabajo.
Entonces, si tiene 5 hojas, su código dice; Copie Cover_Sheets
y 5
, 5
interpretá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_Sheets
y hasta el final, puede crear esa matriz primero y luego usar lo que tiene.
Utilizo el índice de Cover_Sheet
como 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