我正在尝试创建一个“客户友好”版本的工作簿,它将包含从“封面”到最终工作表的所有选项卡。工作簿有一个宏,可以多次复制“值”工作表,每次都连续重命名它,例如 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_Sheets
和Sheets.Count
。
Sheets.Count
将返回工作簿中的工作表数量。
因此,如果您有 5 张工作表,您的代码会说;复制Cover_Sheets
和5
,5
被解释为第 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