將工作表「封面表」中的一系列工作表複製到 Sheets.Count 到新工作簿中

將工作表「封面表」中的一系列工作表複製到 Sheets.Count 到新工作簿中

我正在嘗試創建一個“客戶友好”版本的工作簿,其中將包括從“Cover_Sheet”到最終工作表的所有選項卡。工作簿有一個巨集可以多次複製「值」表,每次都連續重命名它,例如 value2、value3 等。

我不知道需要影印多少張才能使用該Sheets.Count功能。該工作簿只提供了封面和最終值選項卡。

我一直在嘗試使用以下內容:

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

答案1

您只獲得“封面”和“最終值”選項卡,因為您告訴它複製Cover_SheetsSheets.Count
Sheets.Count將會傳回工作簿中的工作表數。
所以如果你有 5 張紙,你的程式碼會說:複製Cover_Sheets55被解釋為第五張紙,因此是最後一張紙。

我不完全確定你的意思,但我假設你有一個不同的巨集來建立其他值選項卡。如果您想複製所有工作表,從 開始Cover_Sheets,一直到末尾,您可以先建立該數組,然後使用您所擁有的。
我使用 的索引Cover_Sheet作為起點,一直走到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

然而,這仍然只會在新工作簿 Cover_Sheet 中的第一個工作表上設定密碼。不確定這是否是一個問題,因為你沒有提出這個問題。但如果是,只需替換ActiveSheet.Protect "password"為以下內容:

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

您也可以使用循環以更“正常”的方式填充數組,但我發現單行方法很有趣。

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

相關內容