Der Code von this forum ist, was ich als Ausgangspunkt verwendet habe. Ich versuche, es zu ändern, um mehrere Blätter zu kopieren und sie alle als Werte anstelle von nur einem Blatt einzufügen.Bearbeiten VBA zum Einfügen mehrerer Blätter als Werte in neue Arbeitsmappe
Ich kopierte mehrere Blätter mit worksheets(array(1,2,3)).copy
. Ich denke, das Problem ist With ActiveSheet.UsedRange
, weil es nur das erste Blatt als Werte ersetzt und die restlichen Blätter als Formeln belassen.
Was muss ich ändern, damit alle Blätter als Werte eingefügt werden?
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.DisplayAlerts = False
Worksheets(Array("Sheet 1","Sheet 2","Sheet 3").Copy
With ActiveSheet.UsedRange
.Value = .Value
End With
Set wbNew = ActiveWorkbook
wbNew.SaveAs "L:\Performance Data\UK Sales\Sales (Latest).xlsx"
wbNew.Close True
Application.DisplayAlerts = True
End Sub
Vielen Dank für Ihre Antwort! Ich versuche, die Werte in die ** kopierte ** Arbeitsmappe einzufügen, wie Sie sagten. Die ursprüngliche Arbeitsmappe sollte alle Formeln behalten. Wenn ich jedoch diesen Code ausprobierte, fügte er die Werte in das Originalblatt ein und der Arbeitsspeicher ging während der Schleife nicht mehr aus. Gibt es eine Möglichkeit zu begrenzen, wie viele Schleifen es tut? – tenvfa
@tenvfa - Siehe den aktualisierten Code. Funktioniert es? Wenn der Arbeitsspeicher knapp wird, sollten Sie die Größe von 'UsedRange' überprüfen ... wie groß schätzen Sie das? – BruceWayne
Ihre Bearbeitung hat das Problem behoben, dass Werte nur in die neue Arbeitsmappe kopiert werden. Vielen Dank. Es lief wieder der Speicher aus und der Debugger wurde mit 'wbNews.Worksheets (shts (i)) markiert. UsedRange.Value = wbNew.Worksheets (shts (i)). UsedRange.Value' als Fehler. Ich bin ein absoluter VBA-Anfänger ohne Programmiererfahrung, daher bin ich mir nicht sicher, ob ich Ihre Frage zur Größe verstanden habe. Das größte Blatt enthält Zellenwerte in 15 Spalten zu 25.000 Zeilen. Das kleinste Blatt hat 15 Spalten zu 2.000 Zeilen. – tenvfa