"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개의 시트가 있는 경우 코드는 다음과 같습니다. Copy 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