Kopieren und Speichern von Daten über VBA in Excel
Schritt-für-Schritt-Anleitung
Um Daten von einer Arbeitsmappe in eine andere zu kopieren und diese anschließend zu speichern, kannst Du den folgenden VBA-Code verwenden. Dieser Code funktioniert in Excel-Versionen, die VBA unterstützen:
- Öffne die Arbeitsmappe, aus der Du kopieren möchtest (z.B. Mappe1).
- Füge ein neues Modul in den VBA-Editor ein (Alt + F11, dann Einfügen > Modul).
- Kopiere den folgenden Code in das Modul:
Sub Kopieren_und_Speichern()
Dim wkbAktiv As Workbook, wkbNeu As Workbook
Dim wksAktiv As Worksheet
Dim strPfad As String, strDatei As String
Set wkbAktiv = ActiveWorkbook
Set wksAktiv = ActiveSheet
' Neue Mappe erstellen
Set wkbNeu = Application.Workbooks.Add(Template:=xlWBATWorksheet)
wksAktiv.Range("A2:A4").Copy Destination:=wkbNeu.Worksheets(1).Range("A3")
' Datei auf dem Desktop speichern
Application.DisplayAlerts = False
strPfad = VBA.Environ("Userprofile") & "\Desktop\"
strDatei = "MeineKopie " & Format(Now, "YYYY-MM-DD") & ".xlsm"
wkbNeu.SaveAs Filename:=strPfad & strDatei, FileFormat:=52, CreateBackup:=False
Application.DisplayAlerts = True
wkbNeu.Close savechanges:=True
End Sub
- Schließe den VBA-Editor und führe das Makro aus.
Die Datei wird jetzt auf dem Desktop unter dem Namen "MeineKopie YYYY-MM-DD.xlsm" gespeichert.
Häufige Fehler und Lösungen
Alternative Methoden
Wenn Du nicht nur die Daten aus einer bestimmten Range kopieren möchtest, kannst Du auch die gesamte Arbeitsmappe speichern. Verwende den folgenden Code für das Kopieren und Speichern der gesamten Datei:
Sub Arbeitsmappe_kopieren()
Dim strPfad As String
strPfad = VBA.Environ("Userprofile") & "\Desktop\MeineArbeitsmappe.xlsm"
ThisWorkbook.SaveCopyAs strPfad
End Sub
Praktische Beispiele
Angenommen, Du möchtest nur die Daten in den Zellen A2 bis A4 kopieren und in einer neuen Arbeitsmappe speichern. Der folgende Code zeigt, wie das geht:
Sub Daten_kopieren()
Dim wkbNeu As Workbook
Set wkbNeu = Workbooks.Add
ThisWorkbook.Sheets(1).Range("A2:A4").Copy Destination:=wkbNeu.Sheets(1).Range("A1")
wkbNeu.SaveAs Filename:=VBA.Environ("Userprofile") & "\Desktop\DatenKopie.xlsx"
wkbNeu.Close
End Sub
Tipps für Profis
- Nutze Variablen für Dateinamen und Pfade, um den Code flexibler zu gestalten.
- Verwende
ActiveWorkbook
und ThisWorkbook
, um zwischen der aktuell aktiven Arbeitsmappe und der Arbeitsmappe, in der der Code gespeichert ist, zu unterscheiden.
- Teste Deine Makros in einer Kopie Deiner Arbeitsmappe, um Datenverlust zu vermeiden.
FAQ: Häufige Fragen
1. Kann ich den Code anpassen, um nur bestimmte Benutzer zuzulassen?
Ja, Du kannst Benutzerberechtigungen über die Windows-Umgebungsvariablen steuern, um sicherzustellen, dass nur autorisierte Benutzer auf die Funktionen zugreifen können.
2. Wie kann ich den Code so anpassen, dass er in verschiedenen Excel-Versionen funktioniert?
Stelle sicher, dass Du keinen veralteten Code verwendest und teste die Makros in den Excel-Versionen, die Du unterstützen möchtest. Die Verwendung von Option Explicit
am Anfang Deines Codes kann helfen, Fehler zu vermeiden.
3. Was ist der Unterschied zwischen ActiveWorkbook
und ThisWorkbook
?
ActiveWorkbook
bezieht sich auf die derzeit aktive Arbeitsmappe, während ThisWorkbook
die Arbeitsmappe bezeichnet, in der der Code ausgeführt wird.