将工作表“封面”中的一系列工作表复制到 Sheets.Count 中,放入新工作簿中

将工作表“封面”中的一系列工作表复制到 Sheets.Count 中,放入新工作簿中

我正在尝试创建一个“客户友好”版本的工作簿,它将包含从“封面”到最终工作表的所有选项卡。工作簿有一个宏,可以多次复制“值”工作表,每次都连续重命名它,例如 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被解释为第 5 张工作表,因此是您的最后一张工作表。

我不太确定您的确切意思,但我假设您有一个不同的宏来创建其他值选项卡。如果您想复制所有工作表,从 开始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

相关内容