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.Count
Funktion 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_Sheets
und Sheets.Count
.
Sheets.Count
gibt die Anzahl der Blätter in der Arbeitsmappe zurück.
Wenn Sie also 5 Blätter haben, sagt Ihr Code: Kopieren Cover_Sheets
und 5
, 5
was 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_Sheets
und bis zum Ende, könnten Sie zuerst dieses Array erstellen und dann verwenden, was Sie haben.
Ich verwende den Index von Cover_Sheet
als 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