Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: mit VBA eine neue Datei erzeugen und daten rein ko

mit VBA eine neue Datei erzeugen und daten rein ko
29.04.2015 14:01:21
Jappe
Hallo Forum Gemeinde,
ich benötige mal wieder Hife bei einem VBA Problem.
Ich habe eine fertige Berechnung über ein Makro in Excel. Verschiedene User können einige Parameter (Zeitraum, PIN) - siehe Beispiel - selber ändern.
Dann möchte diese Berechnung in eine neue Datei als Werte kopieren, dann soll der User den Pfad und den Dateiname angeben können und abspeichern. Danach soll die Datei geschlossen werden und die Ursprungsdatei wieder aktiviert werden.
Ich hoffe mir kann dabei jemand helfen. Meine Versuche sind kläglich gescheitert.
Beispiel Datei: https://www.herber.de/bbs/user/97362.xlsx
Danke
Henning

Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: mit VBA eine neue Datei erzeugen und daten rein ko
29.04.2015 17:52:59
fcs
Hallo Henning,
hier 2 Makro-Varianten.
Gruß
Franz
Sub Berechnung_Copy_and_Save()
'einzelnes Berechnungs-Blatt in neue Datei kopieren
Dim varDatei
'Blatt mit Berechnung in neue Datei kopieren
ActiveWorkbook.Sheets("Tabelle1").Copy
'in Kopie in allen Blättern Formeln durch Werte ersetzen
With ActiveWorkbook.Worksheets(1).UsedRange
.Copy
.PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
End With
Range("B1").Select
'Kopie speichern
With Application.FileDialog(msoFileDialogSaveAs)
.ButtonName = "Auswählen"
.Title = "Datei speichern - Bitte Dateiname eingeben/auswählen"
.FilterIndex = 1
'      .InitialFileName = "Berechnung" & Format(Now, "_YYYYMMDD_hhmmss") & ".xlsx"
.InitialFileName = "Berechnung_neu" & ".xlsx"
If .Show = -1 Then
varDatei = .SelectedItems(1)
ActiveWorkbook.SaveAs Filename:=varDatei, FileFormat:=51, addtomru:=True
ActiveWorkbook.Close savechanges:=False
End If
End With
End Sub
Sub Berechnung_Copy_and_Save_2()
'Komplette Datei unter neuem Namen speichern und Formeln entfernen
Dim varDatei, wks As Worksheet
Dim varDatei_Temp, wkbCopy As Workbook
With Application.FileDialog(msoFileDialogSaveAs)
.ButtonName = "Auswählen"
.Title = "Berechnung speichern - Bitte Dateiname eingeben/auswählen"
.FilterIndex = 1
'      .InitialFileName = "Berechnung" & Format(Now, "_YYYYMMDD_hhmmss") & ".xlsx"
.InitialFileName = "Berechnung_neu" & ".xlsx"
If .Show = -1 Then
varDatei = .SelectedItems(1)
Else
Exit Sub
End If
End With
'temporäre Kopie speichern
With ActiveWorkbook
varDatei_Temp = .Path & "\tmp" & .Name
.SaveCopyAs varDatei_Temp
End With
'temporäre Datei öffnen
Set wkbCopy = Application.Workbooks.Open(Filename:=varDatei_Temp)
'in Kopie in allen Blättern Formeln durch Werte ersetzen
For Each wks In wkbCopy.Worksheets
With wks.UsedRange
.Copy
.PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
End With
wks.Activate
Range("B1").Select
Next
wkbCopy.Sheets(1).Activate
'Berechnungs-Datei unter neuem Namen speichern
Application.DisplayAlerts = False 'vermeidet Rückfrage wegen Makros
wkbCopy.SaveAs Filename:=varDatei, FileFormat:=51, addtomru:=True
wkbCopy.Close savechanges:=False
Application.DisplayAlerts = True
'temporäre Datei wieder löschen
VBA.Kill varDatei_Temp
End Sub

Anzeige
AW: mit VBA eine neue Datei erzeugen und daten rein ko
30.04.2015 09:24:55
Jappe
Hallo Franz,
das sieht ja wirklich super aus, nur habe ich jetzt ein kleines Problem.
Die Quelle hat einen Blattschutz, den ich wärhrend des Makrolaufes abschalte und zum Schluß wieder einschalte, mit
Worksheets("Berechnung").Protect Password:="test", DrawingObjects:=True
Jetzt hat das neue Sheet auch den Blattschutz, kann man das umgehen?
Viele Grüße
Henning

Anzeige
AW: mit VBA eine neue Datei erzeugen und daten rein ko
30.04.2015 11:29:59
fcs
Hallo Henning,
einfach nach dem Kopieren des Blattes in die neue Datei den Blattschutz des kopierten Blatts aufheben.
Gruß
Franz
Sub Berechnung_Copy_and_Save()
'einzelnes Berechnungs-Blatt in neue Datei kopieren
Dim varDatei
'Blatt mit Berechnung in neue Datei kopieren
ActiveWorkbook.Sheets("Berechnung").Copy
'in Kopie in allen Blättern Formeln durch Werte ersetzen
With ActiveWorkbook.Worksheets(1)
.Unprotect Password:="test" 'Blattschutz aufheben - Passwort ggf. anpassen
With .UsedRange
.Copy
.PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
End With
End With
Range("B1").Select
'Kopie speichern
With Application.FileDialog(msoFileDialogSaveAs)
.ButtonName = "Auswählen"
.Title = "Datei speichern - Bitte Dateiname eingeben/auswählen"
.FilterIndex = 1
'      .InitialFileName = "Berechnung" & Format(Now, "_YYYYMMDD_hhmmss") & ".xlsx"
.InitialFileName = "Berechnung_neu" & ".xlsx"
If .Show = -1 Then
varDatei = .SelectedItems(1)
ActiveWorkbook.SaveAs Filename:=varDatei, FileFormat:=51, addtomru:=True
ActiveWorkbook.Close savechanges:=False
End If
End With
End Sub
in der Variante 2, in der die ganze Datei kopiert wird eine zusätzliche Zeile einbauen.
    'in Kopie in allen Blättern Formeln durch Werte ersetzen
For Each wks In wkbCopy.Worksheets
wks.Unprotect Password:="test" 'Blattschutz aufheben - Passwort ggf. anpassen ##Neu##
With wks.UsedRange

Anzeige
AW: mit VBA eine neue Datei erzeugen und daten rein ko
30.04.2015 13:50:38
Jappe
Hallo Franz,
ja so funktioniert es. Ich muss jetzt erst mal weiter testen und daas ergebnis vorstellen.
Könnte ich mich bei wieteren Fragen noch mal an dich wenden?
Viele Grüße und vielen Dank
Henning

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Mit VBA eine neue Excel-Datei erstellen und Daten übergeben


Schritt-für-Schritt-Anleitung

Um mit Excel VBA eine neue Datei zu erstellen und Daten hinein zu kopieren, kannst Du den folgenden Schritten folgen:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu starten.

  2. Füge ein neues Modul hinzu: Rechtsklick auf "VBAProject (DeineDatei.xlsx)" > Einfügen > Modul.

  3. Kopiere den folgenden Code in das Modul:

    Sub Berechnung_Copy_and_Save()
        ' Einzelnes Berechnungs-Blatt in neue Datei kopieren
        Dim varDatei
        ' Blatt mit Berechnung in neue Datei kopieren
        ActiveWorkbook.Sheets("Tabelle1").Copy
        ' In Kopie in allen Blättern Formeln durch Werte ersetzen
        With ActiveWorkbook.Worksheets(1)
            .UsedRange.Copy
            .PasteSpecial Paste:=xlPasteValues
            Application.CutCopyMode = False
        End With
        Range("B1").Select
        ' Kopie speichern
        With Application.FileDialog(msoFileDialogSaveAs)
            .ButtonName = "Auswählen"
            .Title = "Datei speichern - Bitte Dateiname eingeben/auswählen"
            .InitialFileName = "Berechnung_neu.xlsx"
            If .Show = -1 Then
                varDatei = .SelectedItems(1)
                ActiveWorkbook.SaveAs Filename:=varDatei, FileFormat:=51, addtomru:=True
                ActiveWorkbook.Close savechanges:=False
            End If
        End With
    End Sub
  4. Führe das Makro aus: Drücke F5, während der Cursor im Code ist, um das Makro zu starten.


Häufige Fehler und Lösungen

  • Fehler: "Das Arbeitsblatt kann nicht kopiert werden."

    • Lösung: Stelle sicher, dass das Arbeitsblatt, das Du kopieren möchtest, tatsächlich existiert und nicht geschützt ist.
  • Fehler: "Keine Datei ausgewählt."

    • Lösung: Überprüfe, ob Du im Dialogfeld für das Speichern eine Datei ausgewählt hast.

Alternative Methoden

Wenn Du eine neue Excel-Datei erstellen und speichern möchtest, gibt es alternative Methoden, wie die Verwendung von Workbooks.Add:

Sub NeueDateiErstellen()
    Dim wbk As Workbook
    Set wbk = Workbooks.Add
    ' Weitere Anpassungen und Datenübertragungen hier
    wbk.SaveAs Filename:="DeinDateiname.xlsx", FileFormat:=51
    wbk.Close
End Sub

Diese Methode ist nützlich, wenn Du eine ganz neue Datei ohne Kopieren eines bestehenden Blattes erstellen möchtest.


Praktische Beispiele

Hier sind einige praktische Anwendungen von VBA, um eine neue Excel-Datei zu erstellen:

  1. Daten von einem Blatt in ein neues Blatt kopieren:

    Sub DatenKopieren()
        Dim wbkNeu As Workbook
        Set wbkNeu = Workbooks.Add
        ThisWorkbook.Sheets("Daten").UsedRange.Copy wbkNeu.Sheets(1).Range("A1")
        wbkNeu.SaveAs Filename:="DatenKopie.xlsx"
        wbkNeu.Close
    End Sub
  2. Formeln in Werte umwandeln und in einer neuen Datei speichern:

    Sub WerteSpeichern()
        Dim varDatei As String
        ActiveWorkbook.Sheets("Tabelle1").Copy
        With ActiveWorkbook.Worksheets(1)
            .UsedRange.Copy
            .PasteSpecial Paste:=xlPasteValues
        End With
        varDatei = Application.GetSaveAsFilename("Berechnung_neu.xlsx", "Excel-Dateien (*.xlsx), *.xlsx")
        If varDatei <> "False" Then
            ActiveWorkbook.SaveAs Filename:=varDatei, FileFormat:=51
            ActiveWorkbook.Close
        End If
    End Sub

Tipps für Profis

  • Makros optimieren: Verwende Application.ScreenUpdating = False, um die Bildschirmaktualisierung während des Makrolaufs zu deaktivieren und die Ausführungsgeschwindigkeit zu erhöhen.
  • Blattschutz: Denke daran, den Blattschutz vor dem Kopieren von Daten aufzuheben, um mögliche Fehler zu vermeiden.

FAQ: Häufige Fragen

1. Wie kann ich ein VBA-Makro für verschiedene Excel-Versionen anpassen? Um sicherzustellen, dass Dein Makro in verschiedenen Excel-Versionen funktioniert, verwende nur grundlegende Funktionen und teste es in den gewünschten Versionen.

2. Kann ich das Makro so anpassen, dass es mehrere Blätter kopiert? Ja, Du kannst eine Schleife verwenden, um durch alle gewünschten Blätter zu iterieren und diese in die neue Datei zu kopieren.

3. Wo finde ich die gespeicherte Datei? Die Datei wird im angegebenen Verzeichnis gespeichert, das Du im Dialogfeld auswählst. Achte darauf, den Speicherort im Dialogfeld zu überprüfen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige