我正在嘗試創建一個“客戶友好”版本的工作簿,其中將包括從“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_Sheets
和Sheets.Count
。
Sheets.Count
將會傳回工作簿中的工作表數。
所以如果你有 5 張紙,你的程式碼會說:複製Cover_Sheets
和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