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

Temporäre Datei erstellen - Workbook_BeforeSave

Forumthread: Temporäre Datei erstellen - Workbook_BeforeSave

Temporäre Datei erstellen - Workbook_BeforeSave
17.04.2015 09:11:48
Stefan
Hey Leute,
vielleicht könnt ihr mir weiterhelfen. Ich würde gern eine Temporäre-Datei erstellen lassen beim öffnen der Excel-Mappe. Beim klicken auf speichern soll die Datei automatisch in ein spezifischen ordner gespeichert werden. Bisher habe ich es so:
AUSZUG:

Private Sub Workbook_open()
If IsEmpty(format.Cells(2, 2)) Then
For i = 1 To 12
DateiName = Dir("C:\Users\User\Temp\test_" & i & ".xlsm")
If Dir("C:\Users\User\Temp\test_" & i & ".xlsm") = "" Then
ActiveWorkbook.SaveAs Filename:="C:\Users\User\Temp\test_" & i & ".xlsm"
tempfiles.Cells(tempfiles.Cells(Rows.Count, 1).End(xlUp).Row + 1, 1) = "C:\Users\ _
User\Temp\test_" & i & ".xlsm"
Exit For
End If
Next i
Else
ActiveWorkbook.SaveAs Filename:="C:\Users\User\Temp\" & ThisWorkbook.Name
tempfiles.Cells(tempfiles.Cells(Rows.Count, 1).End(xlUp).Row + 1, 1)            = "C:\Users\ _
_
_
User\Temp\" & ThisWorkbook.Name
End If
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
k = 1
For i = 1 To 12
If Dir("C:\Users\User\FinaleDatei\" & format.Cells(2, 2).Value & "_rev" _
& i & ".xlsm")  "" Then
k = i + 1
Exit For
End If
Next i
Application.ActiveWorkbook.SaveAs Filename:="("C:\Users\User\FinaleDatei\" _
& format.Cells(2, 2).Value & "_rev" & k & ".xlsm", FileFormat:=52, addtomru:=True
MsgBox "Your file was saved here: ("C:\Users\User\FinaleDatei\" &     format.Cells(2, 2). _
Value & "_rev" & k & ".xlsm"
End If
Problem ist: Beim dem Speicher der Temporären Datei wird automaitsch die Workbook_BeforeSave  _
Aktion ausgeführt...soll aber erst beim klicken auf speicher passieren.
vielleicht hat von euch jemand einen Lösungsansatz :)
Vielen Dank!

Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Temp. Datei erstellen - Workbook_BeforeSave
17.04.2015 09:27:51
EtoPHG
Hallo Stefan,
Im Workbook_Open Ereignis:
Application.EnableEvents = False
If IsEmpty(format.Cells(2, 2)) Then
...dein Code
End If
Application.EnableEvents = True
schaltet die Ereignissteuerung temporär aus und verhindert damit, dass beim SaveAs das Workbook_BeforeSave Ereignis angestossen wird.
Gruess Hansueli

Anzeige
AW: Temporäre Datei erstellen - Workbook_BeforeSave
17.04.2015 09:30:17
Luschi
Hallo Stefan,
benutze statt 'SaveAs' diese Methode 'SaveCopyAs' (siehe Vba-Hilfe.
lt. Vba-Hilfe: Speichert eine Kopie der Arbeitsmappe in einer Datei, ändert aber nicht die geöffnete Arbeitsmappe im Speicher.
Und was in der Hilfe nicht drin steht:
das 'Workbook_BeforeSave'-Ereignis wird nicht ausgeführt
vorhandene Dateinen werden überschrieben! (aber das testest Du ja mit Dir(...)
Ansonsten:
Application.EnableEvents = False
ActiveWorkbook.SaveAs ...
MsgBox "..."
Application.EnableEvents = True
Gruß von Luschi
aus klein-Paris

Anzeige
AW: Temporäre Datei erstellen - Workbook_BeforeSave
17.04.2015 10:31:00
fcs
Hallo Stefan,
die anderen Helfer haben ja schon darauf hingewiesen, dass du die Ereignis-Makros vorübergehend deaktivieren muss.
Im Before_Save-Makro muss du aber nach ein paar Sachen mehr anpassen.
Die Variable für die Verzeichnisse muss du nicht einbauen. Es machte aber für mich das Testen und Codeanpasung einfacher.
Gruß
Franz
Private Sub Workbook_open()
Dim DateiName As String, strTemp As String, i As Integer
strTemp = "C:\Users\User\Temp\"
Application.EnableEvents = False
If IsEmpty(format.Cells(2, 2)) Then
For i = 1 To 12
DateiName = Dir(strTemp & "test_" & i & ".xlsm")
If Dir(strTemp & "test_" & i & ".xlsm") = "" Then
ActiveWorkbook.SaveAs Filename:=strTemp & "test_" & i & ".xlsm"
tempfiles.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) = _
strTemp & "test_" & i & ".xlsm"
Exit For
End If
Next i
Else
ActiveWorkbook.SaveAs Filename:=strTemp & ThisWorkbook.Name
tempfiles.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) = _
strTemp & ThisWorkbook.Name
End If
Application.EnableEvents = True
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim strFinal As String, i As Integer, k As Integer
strFinal = "C:\Users\User\FinaleDatei\"
If format.Cells(2, 2) = "" Then 'Diese Prüfung muss nicht sein, aber empfehlenswert
MsgBox "Zelle B2 in Blatt """ & format.Name & """ ist noch leer! Datei nicht gespeichert!" _
Cancel = True
Exit Sub
End If
k = 1
For i = 1 To 12
If Dir(strFinal & format.Cells(2, 2).Value & "_rev" & i & ".xlsm")  "" Then
k = i + 1
'            Exit For  'Zeile muss weg sonst funktioniert es nur bis Rev1
End If
Next i
Application.EnableEvents = False
Application.ActiveWorkbook.SaveAs Filename:=strFinal _
& format.Cells(2, 2).Value & "_rev" & k & ".xlsm", _
FileFormat:=52, addtomru:=True
Application.EnableEvents = True
MsgBox "Your file was saved here: " _
& strFinal & format.Cells(2, 2).Value & "_rev" & k & ".xlsm"
Cancel = True
End Sub

Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Temporäre Dateien in Excel mit VBA erstellen


Schritt-für-Schritt-Anleitung

  1. Öffne den VBA-Editor: Drücke ALT + F11, um den VBA-Editor in Excel zu öffnen.

  2. Füge einen neuen Code ein: Wähle das entsprechende Workbook aus und füge den folgenden Code in das ThisWorkbook Modul ein:

    Private Sub Workbook_Open()
        Dim DateiName As String, strTemp As String, i As Integer
        strTemp = "C:\Users\User\Temp\"
        Application.EnableEvents = False
        If IsEmpty(format.Cells(2, 2)) Then
            For i = 1 To 12
                DateiName = Dir(strTemp & "test_" & i & ".xlsm")
                If DateiName = "" Then
                    ActiveWorkbook.SaveAs Filename:=strTemp & "test_" & i & ".xlsm"
                    tempfiles.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) = strTemp & "test_" & i & ".xlsm"
                    Exit For
                End If
            Next i
        Else
            ActiveWorkbook.SaveAs Filename:=strTemp & ThisWorkbook.Name
            tempfiles.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) = strTemp & ThisWorkbook.Name
        End If
        Application.EnableEvents = True
    End Sub
  3. Füge den Workbook_BeforeSave Code hinzu:

    Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
        Dim strFinal As String, i As Integer, k As Integer
        strFinal = "C:\Users\User\FinaleDatei\"
        If format.Cells(2, 2) = "" Then
            MsgBox "Zelle B2 in Blatt """ & format.Name & """ ist noch leer! Datei nicht gespeichert!"
            Cancel = True
            Exit Sub
        End If
        k = 1
        For i = 1 To 12
            If Dir(strFinal & format.Cells(2, 2).Value & "_rev" & i & ".xlsm") <> "" Then
                k = i + 1
            End If
        Next i
        Application.EnableEvents = False
        Application.ActiveWorkbook.SaveAs Filename:=strFinal & format.Cells(2, 2).Value & "_rev" & k & ".xlsm", FileFormat:=52, addtomru:=True
        Application.EnableEvents = True
        MsgBox "Your file was saved here: " & strFinal & format.Cells(2, 2).Value & "_rev" & k & ".xlsm"
        Cancel = True
    End Sub
  4. Testen: Speichere deine Arbeitsmappe und teste die Funktionen durch Öffnen und Speichern.


Häufige Fehler und Lösungen

  • Problem: Das Workbook_BeforeSave Ereignis wird beim Speichern der temporären Datei automatisch ausgelöst.

    • Lösung: Stelle sicher, dass Application.EnableEvents = False vor dem Speichern aufgerufen wird, um das Triggern des Ereignisses zu verhindern.
  • Problem: Die Datei wird nicht im gewünschten Speicherort gespeichert.

    • Lösung: Überprüfe den angegebenen Dateipfad, um sicherzustellen, dass er korrekt ist. Achte darauf, dass die Ordner existieren.

Alternative Methoden

  • Statt SaveAs kannst du SaveCopyAs verwenden. Diese Methode speichert eine Kopie der Arbeitsmappe, ohne die aktuelle Arbeitsmappe zu verändern. Dies hat den Vorteil, dass das Workbook_BeforeSave Ereignis nicht ausgelöst wird:

    Application.ActiveWorkbook.SaveCopyAs Filename:="C:\Users\User\Temp\temp_datei.xlsm"

Praktische Beispiele

  1. Temporäre Datei mit Datum: Du kannst die temporäre Datei mit einem Datum versehen, um die Versionierung zu verbessern:

    ActiveWorkbook.SaveAs Filename:="C:\Users\User\Temp\temp_datei_" & Format(Now, "yyyymmdd_hhmmss") & ".xlsm"
  2. Speicherort der temporären Dateien: Um herauszufinden, wo Excel temporäre Dateien speichert, kannst du den Temp-Ordner deines Systems überprüfen. Dies ist oft C:\Users\<dein_username>\AppData\Local\Temp.


Tipps für Profis

  • Ereignissteuerung: Denke daran, Application.EnableEvents immer nach dem Speichern wieder auf True zu setzen, um andere Makros nicht zu beeinträchtigen.
  • Fehlerbehandlung: Implementiere eine Fehlerbehandlung mit On Error GoTo für eine robustere Lösung.
  • Dokumentation: Kommentiere deinen Code gut, damit andere (oder du selbst in der Zukunft) schnell verstehen, was jede Zeile bewirken soll.

FAQ: Häufige Fragen

1. Wo speichert Excel temporäre Dateien?
Excel speichert temporäre Dateien standardmäßig im Ordner C:\Users\<dein_username>\AppData\Local\Temp.

2. Wie kann ich eine Excel tmp Datei wiederherstellen?
Du kannst versuchen, die temporäre Datei aus dem Temp-Ordner zu finden. Oft haben diese Dateien die Endung .tmp oder .xlsm.

3. Was ist der Unterschied zwischen SaveAs und SaveCopyAs?
SaveAs ändert die aktuelle Arbeitsmappe, während SaveCopyAs nur eine Kopie speichert, ohne die Originaldatei zu beeinflussen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige