Kopieren Sie einen Blattbereich vom Blatt „Deckblatt“ nach Sheets.Count in eine neue Arbeitsmappe.

Kopieren Sie einen Blattbereich vom Blatt „Deckblatt“ nach Sheets.Count in eine neue Arbeitsmappe.

Ich versuche, eine „kundenfreundliche“ Version der Arbeitsmappe zu erstellen, die alle Registerkarten vom „Deckblatt“ bis zum letzten Blatt enthält. Die Arbeitsmappe verfügt über ein Makro, um das „Wert“-Blatt mehrfach zu kopieren und es jedes Mal fortlaufend umzubenennen, z. B. Wert2, Wert3 usw., daher

Ich weiß nicht, wie viele Blätter kopiert werden müssen und möchte die Sheets.CountFunktion nutzen. Die Arbeitsmappe enthält nur das Deckblatt und die Registerkarte mit den Endwerten.

Ich habe versucht, Folgendes zu verwenden:

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

Antwort1

Sie erhalten nur das „Deckblatt“ und die Registerkarte „Endwert“, weil Sie es anweisen, zu kopieren Cover_Sheetsund Sheets.Count.
Sheets.Countgibt die Anzahl der Blätter in der Arbeitsmappe zurück.
Wenn Sie also 5 Blätter haben, sagt Ihr Code: Kopieren Cover_Sheetsund 5, 5was als 5. Blatt interpretiert wird, also als Ihr letztes Blatt.

Ich bin mir nicht ganz sicher, was Sie genau meinen, aber ich nehme an, Sie haben ein anderes Makro, das die anderen Werteregisterkarten erstellt. Wenn Sie alle Blätter kopieren möchten, beginnend mit dem Cover_Sheetsund bis zum Ende, könnten Sie zuerst dieses Array erstellen und dann verwenden, was Sie haben.
Ich verwende den Index von Cover_Sheetals Ausgangspunkt und gehe bis zum 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

Dadurch wird jedoch weiterhin nur ein Kennwort für das erste Blatt in der neuen Arbeitsmappe, Cover_Sheet, festgelegt. Ich bin mir nicht sicher, ob das ein Problem ist, da Sie es nicht angesprochen haben. Wenn dies jedoch der Fall ist, ersetzen Sie es einfach ActiveSheet.Protect "password"durch Folgendes:

For Each wsheet In ActiveWorkbook.Worksheets
    wsheet.Protect Password:="password"
Next wsheet

Sie könnten das Array auch auf die „normalere“ Art und Weise mit einer Schleife füllen, aber ich finde diesen einzeiligen Ansatz interessant.

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

verwandte Informationen