시트 "표지 시트"에서 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_Sheets및 를 복사하라고 지시하기 때문에 "표지"와 "최종 값" 탭만 표시됩니다 Sheets.Count.
Sheets.Count통합 문서의 시트 수를 반환합니다.
따라서 5개의 시트가 있는 경우 코드는 다음과 같습니다. Copy Cover_Sheets555번째 시트로 해석되어 마지막 시트로 이동합니다.

정확히 무슨 뜻인지는 모르겠지만 다른 값 탭을 생성하는 다른 매크로가 있다고 가정합니다. 로 시작하여 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

관련 정보