Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Kopieren und speichern über VBA

Kopieren und speichern über VBA
16.08.2017 09:09:56
Tom
Hallo Ihr Experten,
ich habe noch ein "kleines" Problem. Ich möchte gerne einen Inhalt aus einer Datei (Mappe1) in eine andere Datei (Mappe2) kopieren.
Dazu mein Code:
Sub Kopieren_speichern()
' Kopieren_speichern Makro
Range("A2:A4").Select
Selection.Copy
Windows("Mappe2").Activate
Range("A3").Select
ActiveSheet.Paste
Windows("Mappe1").Activate
Range("B2").Select
End Sub
Manchmal werden die Daten aber auch aus Mappe3 in Mappe2 kopiert.
Ist es möglich den Dateinamen im Code so anzupassen, dass er sich ändert/anpasst, je nachdem in welcher Datei der Code eingefügt wird? Ich möchte gerne den obenstehenden Code dann in Mappe3 einfügen ohne im Code Änderungen vornehmen zu müssen, zwecks Fehleranfälligkeit etc.
Und gibt es eine Möglichkeit die Datei anschließend auf dem Desktop zu speichern unabhängig welcher Benutzer den Code verwendet?
Danke Euch und beste Grüße
Tom
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Kopieren und speichern über VBA
16.08.2017 11:06:51
fcs
Hallo Tom,
die momentan aktive Arbeitsmappe kannst du im Code als ActiveWorkbook ansprechen.
Die Datei in der das Makro gespeichert ist als ThisWorkbook.
Wenn der Name "Mappe2" für die 2. Arbeitsmappe nicht konstant ist, dann muss man sich hier etwas einfallen lassen. Wenn es sich um eine neu angelegte Arbeitsmappe handelt, dann sollte man die vom Makro mit anlegen lassen. Siehe weitere Variante.
Es gibt verschieden Umgebungsvariablen, die VBA vom Betriebssystem abrufen kann.
Für das Desktop-Verzeichnis ist dies das Verzeichnis in der Umgebungsvariablen "Userprofile" verfügbar.
Gruß
Franz
Sub Kopieren_speichern()
' Kopieren_speichern Makro
Dim wkbAktiv As Workbook
Set wkbAktiv = ActiveWorkbook 'momentan aktive Arbeitsmappe
Range("A2:A4").Select
Selection.Copy
Windows("Mappe2").Activate
Range("A3").Select
ActiveSheet.Paste
wkbAktiv.Activate
Range("B2").Select
End Sub
Sub Kopieren_speichern_Variante()
' Kopieren_speichern Makro
' ThisWorkbook = Arbeitsmappe in der das Makro gespeichert ist
Range("A2:A4").Select
Selection.Copy
Windows("Mappe2").Activate
Range("A3").Select
ActiveSheet.Paste
ThisWorkbook.Activate
Range("B2").Select
End Sub
Sub Speichern_auf_Desktop()
' Makro1 Makro
Dim strPfad As String, strDatei As String
With Application
strPfad = VBA.Environ("Userprofile") & .PathSeparator & "Desktop" & .PathSeparator
End With
strDatei = "MeineDatei " & Format(Now, "YYYY-MM-DD") & ".xlsm"
'Datei mit Makros speichern
Application.DisplayAlerts = False 'schon vorhandene Datei wird ohne Rückfrage überschrieben
ActiveWorkbook.SaveAs Filename:=strPfad & strDatei, FileFormat:=52, CreateBackup:=False, _
addtomru:=True '52 = xlOpenXMLWorkbookMacroEnabled
Application.DisplayAlerts = True
End Sub
Sub Kopieren_und_Speichern()
' Kopieren_speichern Makro
' ThisWorkbook = Arbeitsmappe in der das Makro gespeichert ist
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 mit 1 Tabellenblatt erstellen
Set wkbNeu = Application.Workbooks.Add(Template:=xlWBATWorksheet) 'Template ggf. anpassen
wksAktiv.Range("A2:A4").Copy Destination:=wkbNeu.Worksheets(1).Range("A3")
wkbAktiv.Activate
'Neue Datei mit Makros auf dem Desktop speichern
Application.DisplayAlerts = False 'schon vorhandene Datei wird ohne Rückfrage überschrieben
With Application
strPfad = VBA.Environ("Userprofile") & .PathSeparator & "Desktop" & .PathSeparator
End With
strDatei = "MeineKopie " & Format(Now, "YYYY-MM-DD") & ".xlsm"
wkbNeu.SaveAs Filename:=strPfad & strDatei, FileFormat:=52, CreateBackup:=False, _
addtomru:=True '51 = xlOpenXMLWorkbook,  52 = xlOpenXMLWorkbookMacroEnabled
Application.DisplayAlerts = True
wkbNeu.Close savechanges:=True
End Sub

Anzeige
AW: Kopieren und speichern über VBA
16.08.2017 17:12:43
Tom
Hallo Franz,
klappt einmal mehr hervorragend!! :)
Vielen Dank und beste Grüße
Stefan
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

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:

  1. Öffne die Arbeitsmappe, aus der Du kopieren möchtest (z.B. Mappe1).
  2. Füge ein neues Modul in den VBA-Editor ein (Alt + F11, dann Einfügen > Modul).
  3. 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
  1. 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

  • Fehler: „Konnte die Datei nicht finden“

    • Überprüfe, ob der Pfad korrekt ist. Stelle sicher, dass das Desktop-Verzeichnis existiert und dass Du die entsprechenden Berechtigungen hast.
  • Fehler: „Konnte nicht gespeichert werden“

    • Möglicherweise ist eine Datei mit dem gleichen Namen bereits vorhanden. Der Code überschreibt diese ohne Rückfrage. Wenn Du nicht möchtest, dass die Datei überschrieben wird, ändere den Dateinamen im Code.

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.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige