Sheets kopieren und Formeln durch Werte ersetzen
Schritt-für-Schritt-Anleitung
-
Öffne deine Excel-Datei und drücke ALT + F11
, um den VBA-Editor zu öffnen.
-
Füge ein neues Modul hinzu, indem du im Menü auf Einfügen > Modul
klickst.
-
Kopiere und füge den folgenden VBA-Code ein:
Sub SheetsKopierenUndWerteEinfügen()
Dim Dateiname As String
Dim WBS As Workbook
Dim WS As Worksheet
Dim pfad As String
pfad = ActiveWorkbook.Path & "/"
Dateiname = "Dateiname_neu_" & ActiveSheet.Cells(5, 3).Value & ".xlsm"
' Kopiere die Sheets
Worksheets(Array("Hier stehen die Sheets")).Copy
Set WBS = ActiveWorkbook
' Ersetze Formeln durch Werte
For Each WS In WBS.Worksheets
WS.UsedRange.Value = WS.UsedRange.Value
Next WS
' Speichere die neue Datei
WBS.SaveAs Filename:=pfad & Dateiname
Application.CutCopyMode = False
End Sub
-
Passe den Code an, indem du die Namen der Sheets in der Worksheets(Array(...))
-Zeile ersetzt.
-
Schließe den VBA-Editor und führe das Makro aus.
Häufige Fehler und Lösungen
-
Fehler: Formeln zeigen #WERT! an
- Überprüfe, ob die Formeln in den Original-Sheets korrekt sind. Manchmal können ungültige Zellreferenzen beim Kopieren Probleme verursachen.
-
Fehler: Die Datei wird nicht korrekt gespeichert
- Stelle sicher, dass der
pfad
korrekt gesetzt ist. Du kannst den Pfad manuell anpassen, falls nötig.
-
Lösung: Statt WS.UsedRange.Value = WS.UsedRange.Value
- Probiere
WS.UsedRange.Cells.Value = WS.UsedRange.Cells.Value
, um sicherzustellen, dass alle Zellen abgedeckt sind.
Alternative Methoden
Wenn das oben genannte Makro nicht funktioniert, gibt es alternative Methoden:
-
Verwendung von Copy
und PasteSpecial
WS.UsedRange.Copy
WS.PasteSpecial Paste:=xlPasteValues
-
Kopieren und Einfügen von spezifischen Bereichen
- Statt
UsedRange
kannst du einen spezifischen Bereich angeben, um Formeln nur in bestimmten Zellen zu ersetzen.
Praktische Beispiele
Hier ist ein einfaches Beispiel für ein Makro, das mehrere Sheets kopiert und alle Formeln durch ihre Werte ersetzt:
Sub BeispielMakro()
Dim WBS As Workbook
Dim ws As Worksheet
Worksheets(Array("Sheet1", "Sheet2")).Copy
Set WBS = ActiveWorkbook
For Each ws In WBS.Worksheets
ws.UsedRange.Value = ws.UsedRange.Value
Next ws
WBS.SaveAs Filename:="C:\Pfad\zu\deiner\Datei.xlsx"
End Sub
Tipps für Profis
- Verwende
UsedRange
mit Bedacht: UsedRange
kann dynamisch sein und sich ändern. Prüfe die genauen Zellreferenzen.
- Fehlerbehandlung einbauen: Füge
On Error Resume Next
vor kritischen Zeilen hinzu, um den Code robuster zu machen.
- Backup machen: Speichere immer eine Kopie deiner Datei, bevor du mit Makros arbeitest.
FAQ: Häufige Fragen
1. Wie kann ich sicherstellen, dass keine Formeln verloren gehen?
Du kannst eine Kopie der Arbeitsmappe erstellen und dort die Formeln durch Werte ersetzen.
2. Was ist der Unterschied zwischen SaveCopyAs
und SaveAs
?
SaveCopyAs
erstellt eine Kopie der Arbeitsmappe, während SaveAs
die aktuelle Arbeitsmappe unter einem neuen Namen speichert.
3. Wie kann ich mehrere Sheets auf einmal bearbeiten?
Du kannst den Namen der Sheets in der Worksheets(Array(...))
-Zeile auflisten, um mehrere Sheets gleichzeitig zu kopieren und zu bearbeiten.
4. Welche Excel-Versionen unterstützen diese VBA-Funktionen?
Die meisten VBA-Funktionen sind in Excel 2007 und späteren Versionen verfügbar.