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

Forumthread: nach dem öffnen automatisch speichern

nach dem öffnen automatisch speichern
22.08.2013 13:42:33
Sandra
Hallo zusammen,
ich gleich noch einmal.
Ich habe eine Musterliste, die ich vor dem Überschreiben schützen muss. Also habe ich sie als .xltm gespeichert. Soweit so gut. Problem nur - es handelt sich um eine Datei mit Makro, und der Eine oder Andere schafft es, das Makro trotz Warnung beim Speichern rauszuschmeißen, weil Excel leider nicht automatisch .xlsm als Dateityp vorgibt.
Es wäre toll, wenn ihr mir einen Code nennen könntet, der bewirkt, dass die Datei, direkt nach dem öffnen, mit Dateinamen "YYMMDD BV Mangelliste" an einem vorherbestimmten Ort abgespeichert und danach zur Bearbeitung geöffnet wird. Und die .xltm-Datei sollte sich dann auch direkt wieder schließen.
Ich weiß nur nicht ob das geht, denn das Makro wird mitgespeichert, und das soll dann natürlich in der .xlsm nicht mehr ausgeführt werden.
Habt Ihr eine Idee?
Das wäre wirklich super!
1.000-Dank & sonnige Grüße
Sandra

Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: nach dem öffnen automatisch speichern
22.08.2013 16:04:29
Sandra
Hallo,
ich habe gesucht und experimentiert und bin soweit, dass fast alles funktioniert.
Nur das Löschen des Codes (oder zumindest des Teils "Sub workbook_open" - vor dem Speichern - funktioniert noch nicht.
Bitte helft mir, was mache ich falsch?
Private Sub workbook_open()
Call Workbook_SaveAs
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAs As Boolean, Cancel As Boolean)
If SaveAs Then
With ThisWorkbook.VBProject.VBComponents(1).CodeModule
.DeleteLines 1, .CountOfLines
End With
End If
End Sub
Private Sub Workbook_SaveAs()
Dim DName As String
Dim Pfad As String
Dim Dateiname As String
Pfad = "c:\0000 Intern\0200 Doku\0274 Mangeltool\Erfassung"
DName = " Mangelerfassungsliste"
Dateiname = Pfad & "\" & Format(Now, "YYMMDD") & DName & ".xlsm"
ThisWorkbook.SaveAs Filename:=Dateiname
End Sub
Danke & Gruß
Sandra

Anzeige
AW: nach dem öffnen automatisch speichern
22.08.2013 16:39:40
Sandra
Frage ist natürlich noch offen. :(

AW: nach dem öffnen automatisch speichern
22.08.2013 17:26:09
fcs
Hallo Sandra,
ich habe auch etwas probiert. Es scheint unter allen Bedingungen zu funktionieren, ohne das am VBA-Code etwas geändert werden muss. Das würde auch nur unter vielen Randbedingungen funktionieren.
Als zusätzlichen Schutz solltest du die Template-Datei im Dateimanger unter Eigenschaften auf "schreibgeschützt" setzen.
Im Makro muss du noch den Namen der Template/Vorlage-Datei anpassen.
Gruß
Franz
Private Sub Workbook_Open()
Dim strPfad As String, strDateiNeu As String, strOriginalName As String
strPfad = "c:\0000 Intern\0200 Doku\0274 Mangeltool\Erfassung"    'A N P A S S E N ! ! !
strOriginalName = "Originalname.XLTM"     'Name der Template-Datei A N P A S S E N ! ! !
strDateiNeu = strPfad & "\" & Format(Now, "YYMMDD") & " Mangelerfassungsliste"
'  Debug.Print strDateiNeu
If LCase(Me.FullName) = LCase(strDateiNeu & ".xlsm") Then
'do nothing, bereits erstellte Datei wird geöffnet
Else
If Dir(strDateiNeu & ".xlsm")  "" Then
MsgBox "Datei """ & strDateiNeu & ".xlsm"" existiert bereits!" & vbLf & _
"Vorlage wird ohne Speichern wieder geschlossen" & vbLf & _
"Die existierende Datei geöffnet.", _
vbInformation + vbOKOnly, "Mangelliste anlegen"
Application.EnableEvents = False
Application.Workbooks.Open strDateiNeu
Application.EnableEvents = True
Me.Close savechanges:=False
Else
If LCase(Me.Name) = LCase(strOriginalName) Then
'bei direktem Öffnen des Templates
Me.SaveAs Filename:=strDateiNeu, FileFormat:=52, addtomru:=True
ElseIf Me.Path = "" Then
'bei Öffnen des Templates via Datei -- Neu
Me.SaveAs Filename:=strDateiNeu, FileFormat:=52, addtomru:=True
End If
End If
End If
End Sub

Anzeige
AW: nach dem öffnen automatisch speichern
23.08.2013 08:44:27
Sandra
Hallo Franz,
ich habe es in mein Dokument eingefügt und angepasst, aber es läuft nicht wirklich besser als das vorherige Ergebnis.
Problem Nr. 1 - Das Löschen des Makros aus der automatisch abgespeicherten Datei funktioniert nicht. Wenn ich also die Datei nach dem Schließen wieder öffne versucht es eine neue Datei abzulegen. Dadurch konnte ich auch gleich Problem Nr. 2 feststellen - wenn es die generierte Datei schon gibt (das kann vorkommen, wenn verschiedene Kollegen an einem Tag eine Mangelliste erstellen - gerade in der Bauabnahme) dann muss entweder eine laufende Nummer automatisch an den Dateinamen angefügt werden oder von mir aus auch die Uhrzeit oder aber ich muss wenigstens die Möglichkeit haben, die Datei dann unter einem anderen Namen zu speichern (so war es bei meinem Code).
Der Code, den ich gepostet habe funktionierte eigentlich gut. Nur das das Löschen des Makros nicht funktionierte.
Hättest Du vielleicht noch eine Idee in bezug auf meinen geposteten Code?
Vielen lieben Dank schon einmal vorab!
Gruß
Sandra

Anzeige
AW: nach dem öffnen automatisch speichern
23.08.2013 14:46:55
fcs
Hallo Sandra,
ich hab mir dein Makro nochmals vorgenommen.
Wenn die Vorlage geöffnet wird oder via Datei-Neu eine neue Datei auf Basis der Vorlage erstellt wird, dann wird direkt der Speichern-unter-Dialog angezeigt mit dem neuen Namen als Namens-Vorschlag. Wird ein schon vorhandener Name benutzt wird dies geprüft und ggf. der Auswahldialog nochmals angezeigt.
Als zusätzlichen Schutz die Eigenschaft "schreibgeschützt" im Dateimanager aktivieren.
So kann die Vorlage nicht versehentlich überschrieben werden, falls beim Öffnen der Vorlage die Makros deaktiviert werden.
Das Ändern des VBA-Projekts (Löschen von Zeilen) ist schwierig umzusetzen. So müsste z.B. jeder Anwender die Einstellung "Zugriff auf VBA-Projektmodell erlauben" aktivieren unter den Optionen/Sicherheitscenter/Einstellungen für Makros. Auch der Zugriff eines Makros auf das eigene VBA-Projekt ist nicht ohne weiteres umzusetzen.
Gruß
Franz
Option Explicit
Private Const strNameVorlage As String = "Mangelerfassungsliste.xltm" 'Name der Vorlagedatei
Private Sub workbook_open()
If LCase(Me.Name) = LCase(strNameVorlage) Or Me.Path = "" Then
Call Workbook_SaveAs
End If
End Sub
Private Sub Workbook_SaveAs()
Dim DName As String
Dim Pfad As String
Dim Dateiname As Variant, strPrompt1 As String, strPrompt2 As String
Pfad = "c:\0000 Intern\0200 Doku\0274 Mangeltool\Erfassung"
Pfad = "D:\Test\ZwischenOrdner"
DName = " Mangelerfassungsliste"
Dateiname = Pfad & "\" & Format(Now, "YYMMDD hhmmss") & DName & ".xlsm"
AuswahlDateiname:
With Application.FileDialog(msoFileDialogSaveAs)
.Title = "Neue Mangelerfassungsliste anlegen - vorgeschlagenen Namen anpassen falls gewü _
nscht"
.FilterIndex = 2 'normalerweise xlsm-Datei
.InitialFileName = Dateiname
If .Show = -1 Then
Dateiname = .SelectedItems(1)
If Dir(Dateiname) = "" Then
ThisWorkbook.SaveAs Filename:=Dateiname, FileFormat:=52, addtomru:=True
Else
If MsgBox("Der gewählte Dateiname existiert bereits. " & vbLf _
& "Anderen Namen wählen?", _
vbQuestion + vbOKCancel, "") = vbOK Then
GoTo AuswahlDateiname
Else
Me.Close savechanges:=False
End If
End If
Else
Me.Close savechanges:=False
End If
End With
End Sub

Anzeige
funktioniert prima
26.08.2013 14:33:23
Sandra
Hallo Franz,
vielen lieben Dank!!! Das läuft super bei mir. Bin gespannt ob es bei den Kollegen auch läuft!
Sonnige Grüße
Sandra
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Automatisches Speichern von Excel-Dateien nach dem Öffnen


Schritt-für-Schritt-Anleitung

  1. Öffne deine Excel-Vorlage (.xltm), in der du das automatische Speichern implementieren möchtest.

  2. Füge den folgenden VBA-Code in das Modul der Arbeitsmappe ein:

    Private Sub Workbook_Open()
       If LCase(Me.Name) = LCase("DeineVorlage.xltm") Or Me.Path = "" Then
           Call Workbook_SaveAs
       End If
    End Sub
    
    Private Sub Workbook_SaveAs()
       Dim Pfad As String
       Dim Dateiname As String
       Pfad = "c:\Dein\Speicherort"
       Dateiname = Pfad & "\" & Format(Now, "YYMMDD hhmmss") & " Mangelerfassungsliste.xlsm"
    
       With Application.FileDialog(msoFileDialogSaveAs)
           .Title = "Speichern unter..."
           .InitialFileName = Dateiname
           .FilterIndex = 2
           If .Show = -1 Then
               ThisWorkbook.SaveAs Filename:=.SelectedItems(1), FileFormat:=52
           Else
               Me.Close savechanges:=False
           End If
       End With
    End Sub
  3. Passe den Code an deine Bedürfnisse an, insbesondere den Speicherort und den Namen der Vorlage.

  4. Aktiviere die Makrosicherheit in den Excel-Optionen, um sicherzustellen, dass dein Makro ausgeführt werden kann.

  5. Speichere die Datei und teste das Öffnen der Vorlage.


Häufige Fehler und Lösungen

  • Fehler: Makro wird nicht ausgeführt.

    • Stelle sicher, dass die Makros in den Excel-Optionen aktiviert sind. Gehe zu Datei > Optionen > Sicherheitscenter > Einstellungen für Makros.
  • Fehler: Die Datei wird nicht korrekt abgespeichert.

    • Überprüfe den Pfad, den du im VBA-Code angegeben hast. Der Ordner muss existieren.
  • Fehler: Die Vorlage wird überschrieben.

    • Setze die Vorlage im Dateimanager auf „schreibgeschützt“, um versehentliches Überschreiben zu vermeiden.

Alternative Methoden

Eine alternative Methode, um das automatisierte Speichern zu erreichen, ist die Verwendung von Excel-Add-Ins oder VBA-Skripten, die beim Öffnen der Datei in Excel geladen werden. Diese können zusätzliche Funktionen bieten, wie z.B. das Hinzufügen von Zeitstempeln oder das Anpassen von Dateinamen.


Praktische Beispiele

  1. Beispiel 1: Einfaches Speichern mit Zeitstempel

    • Verwende den oben angegebenen Code und passe den Dateinamen nach deinen Wünschen an.
  2. Beispiel 2: Anpassung für mehrere Benutzer

    • Modifiziere den Code, um eine laufende Nummer oder das Datum und die Uhrzeit in den Dateinamen einzufügen, um Kollisionen zu vermeiden.
    Dateiname = Pfad & "\" & Format(Now, "YYMMDD hhmm") & "_" & Application.UserName & " Mangelerfassungsliste.xlsm"

Tipps für Profis

  • Debugging: Nutze Debug.Print im Code, um Variablenwerte während der Ausführung zu überprüfen.
  • Fehlerbehandlung: Implementiere On Error Resume Next und On Error GoTo 0 für eine bessere Fehlerkontrolle.
  • Versionierung: Achte darauf, dass alle Benutzer eine ähnliche Excel-Version haben, um Komplikationen zu vermeiden.

FAQ: Häufige Fragen

1. Wie kann ich das Makro anpassen, um eine andere Dateiendung zu verwenden?
Ändere einfach die Endung im SaveAs-Befehl. Zum Beispiel für .xlsb:

ThisWorkbook.SaveAs Filename:=Dateiname, FileFormat:=50

2. Was passiert, wenn eine Datei mit dem gleichen Namen bereits existiert?
Das Makro prüft dies und zeigt eine Meldung an, um einen neuen Namen auszuwählen.

3. Muss ich VBA-Kenntnisse haben, um das zu implementieren?
Ein grundlegendes Verständnis von VBA ist hilfreich. Die bereitgestellten Codes sind jedoch einfach zu implementieren.

4. Wo finde ich die Optionen für die Makrosicherheit?
Gehe zu Datei > Optionen > Sicherheitscenter > Einstellungen für Makros, um die erforderlichen Einstellungen vorzunehmen.

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