el3ment
Goto Top

Automatisches Zwischenspeichern funktioniert nicht wirklich

Hallo,

hat von euch jemand Erfahrung mit der automatischen Zwischenspeicherung von Excel ?
Ich teste es gerade mal aus unter Windows XP Pro mit Office 2003....!

Habe die automatische Zwischenspeicherung unter Extras -> Optionen -> Speichern eingestellt, als Zeitangabe habe ich 1 Minute eingestellt.
Die Zwischenkopie wird unter %appdata%\microsoft\excel\ abgelegt, während Excel offen ist und man bearbeitet eine Mappe wird in der angegebenen Zeit eine *.xra Datei angelegt und aktualisiert. Schliesst man nun Excel ohne zu speichern verschwindet die *.xra Datei und es wird eine Excel11.xlb erstellt.
Wenn ich diese Datei öffne, öffnet sich eine leere Mappe! Nun habe ich mal getestet bevor Excel geschlossen wird die *.xra-Datei wegzukopieren, dann habe ich Excel geschlossen ohne zu speichern, die xlb-Datei ist wieder wertlos aber dir wegkopierte *.xra Datei enthaält alle Daten, das ist also die eigentliche Kopie welche alle Daten enthält - Warum wird diese aber gelöscht sobald Excel geschlossen wird bzw. warum steht in der Excel11.xlb nichts ?

Habt Ihr dasselbe Problem oder ist es ein Konfigurationsproblem?
Wäre super wenn es jemand mal so nachstellen kann udn schaut ob dasselbe passiert...!

Vielen Dank schonmal.

Content-Key: 126651

Url: https://administrator.de/contentid/126651

Printed on: April 26, 2024 at 20:04 o'clock

Member: Logan000
Logan000 Oct 07, 2009 at 14:46:45 (UTC)
Goto Top
Moin Moin

Ich denke das Excel, wenn Du das Speichern verneinst, diese Änderungen (*.xra) verwirft.
Wenn du das Autospeichern testen möchtest, warte bis die .xra datei existiert und schieß Excel über TaskManager ab.

Gruß L.
Member: el3ment
el3ment Oct 07, 2009 at 14:54:14 (UTC)
Goto Top
So könnte es funktionieren aber das ist ja eigentlich nicht ganz Sinn und Zweck der Funktion, oder!?
Ich hatte z.B. vorhin so einen Fall das jemand Excel einfach geschlossen hat und versehentlich auf "Nein" gedrückt hat beim speichern...!

Man kann ja nicht davon ausgehen das immer Excel komplett abschmiert oder der Rechner sodass die *.xra Datei nicht gelöscht wird....!
Das kann es ja nicht wirklich sein!?
Mitglied: 76109
76109 Oct 07, 2009 at 17:32:08 (UTC)
Goto Top
Hallo el3ment!

Das Zwischenspeichern ist eine reine AutoWiederherstellungs-Funktion und bei den Einstellungen auch als solche angegeben. Sie ist tatsächlich nur dafür gedacht, die Datei wiederherzustellen, falls Excel wegen eines Ausnahmefehlers geschlossen wird/wurde. D.h. Du hast den Sinn des ganzen offensichtlich falsch verstanden und solltest den Fehler nicht bei Excel suchenface-wink

Wenn der Anwender die Frage zum speichern verneint, dann hat er wohl oder übel Pech gehabtface-smile

Abhilfe könnte ein Makro schaffen, dass die Datei entgegen der Anweisung des Anwenders trotzdem speichert oder eventuell bis zu 5 mal nachfragt, ob denn nun wirklich nicht gespeichert werden soll oder beim verneinen eine *.bak-Datei anlegt. Um Anwenderfehler weitgehenst auszuschließen, gibt es unzählige Möglichkeiten.

Gruß Dieter
Member: el3ment
el3ment Oct 08, 2009 at 08:43:13 (UTC)
Goto Top
Jetzt wo du es sagst und ich mir das nochmal genau durch den Kopf gehen lasse wird mir alles klar... "wer lesen kann...."

Da denkt Excel also nur an sich selbst... ;) !

Das wäre noch eine super Zusatzfunktion wenn die Datei auch so gespeichert werden könnte.

Vielen Dank !
Mitglied: 76109
76109 Oct 08, 2009 at 09:16:31 (UTC)
Goto Top
Hallo el3ment!

Mit einem Makro ist es sehr einfach, beim Verneinen eine *.bak-Datei zu speichern. Falls Du ein solches haben möchtest, gib mir Bescheidface-wink

Gruß Dieter
Member: el3ment
el3ment Oct 08, 2009 at 09:42:45 (UTC)
Goto Top
Das wäre SUPER, suche gerade schon nach sowas weil ich nicht wirklich Ahnung habe von Makros erstellen....!
Mitglied: 76109
76109 Oct 08, 2009 at 11:20:02 (UTC)
Goto Top
Hallo el3ment!

Führe in einer Excel-Datei folgende Schritte aus:

1. <Menu><Extras><Makro><Visual Basic Editor>
2. <Diese Arbeitsmappe Doppelklick><Quelltext Einfügen>
3. <VB-Editor schließen><Excel-Datei Speichern>

Im Anschluss wird jedesmal beim Verneinen des Speicherns, die Datei mit der Endung *.xls.bak gespeichert/überschrieben.
Option Explicit

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Dim wkb As Workbook
    Set wkb = ThisWorkbook
    If wkb.Saved = False Then wkb.SaveCopyAs (wkb.FullName & ".bak")  
End Sub

Gruß Dieter
Member: el3ment
el3ment Oct 08, 2009 at 11:32:29 (UTC)
Goto Top
Vielen Dank, funktioniert einwandfrei!

Kann man das so einbauen das dies auch passiert wenn man Excel normal startet und nicht explizit diese Mappe ? Das wäre noch die Kirsche auf der Torte... face-smile !
Mitglied: 76109
76109 Oct 08, 2009 at 11:56:22 (UTC)
Goto Top
Hallo el3ment!

Daran habe ich auch schon gedacht und es müsste über die Start *.xla-Dateien gehen. Aber da hatte ich bisher nix mit zu tun und im Moment fehl mir die Zeit dafür, um das mal auszutesten. Ich behalte es aber mal im Auge und poste die Lösung, sofern ich den eine findeface-smile

Gruß Dieter
Member: el3ment
el3ment Oct 08, 2009 at 12:01:10 (UTC)
Goto Top
Das wäre ganz große Klasse!

Vielen Dank schonmal bis hier her!
Mitglied: 76109
76109 Oct 11, 2009 at 00:34:35 (UTC)
Goto Top
Hallo el3ment!

Tja,, hat leider ein bisschen gedauertface-smile

Also, ich denke, dass ich so ziemlich alle Möglichkeiten abgeklappert und eigentlich nichts brauchbares gefunden habeface-sad


back-to-topWas für Möglichkeiten gibt es:

back-to-topAddIns (*.xla)
Mein erster Gedanke war ein AddIn (*.xla). Die Erstellung ist recht simpel, nützt in unserem Fall aber garnix, weil Ereigniss-Prozeduren entweder schon vor dem Öffnen oder erst nach nach dem Schließen einer Arbeitsmappe ausgeführt werden. D.h. die Mappe ist enweder noch nicht geöffnet oder schon geschlossen. AddIns machen also nur Sinn, um häufig verwendete Funktionen bereitzustellen.


back-to-topXLStart (*.xls)
Da gibt es einen Ordner, der nennt sich XLStart und in diesen Ordner kann eine Vorlage.xls eingefügt werden. Wenn man Excel dann direkt startet, wird auch tatsächlich diese Vorlage geöffnet. Soweit so gut. Nun Klicke ich aber z.B. auf das Symbol <NEU>, dann bekomme ich schon wieder eine stinknormale Leere Mappe. Der Hammer ist jedoch, dass wenn ich eine existierende Arbeitsmappe öffne, dann werden die Arbeitsmappe und zusätzlich noch die Vorlage geöffnet *Kopfschüttel*?


back-to-topMustervorlage (*.xlt)
Dann bleiben noch zwei brauchbare Möglichkeiten über den <Ansicht><Aufgabenbereich> übrig, wobei ich mich frage, ob das überhaupt jemand nutzt. Na, jedenfalls kann man hier eine Vorlage.xls mit <Speichern unter> als <Mustervorlage *.xlt> abspeichern. Diese Vorlage befindet sich dann im Ordner
<D:\Dokumente_und_Einstellungen\User\Anwendungsdaten\Microsoft\Vorlagen> und wird dann über <Allgemeine Vorlagen> ausgewählt.


back-to-topMustervorlage (*.xls)
Die andere Möglichkeit ist auch wieder <Ansicht><Aufgabenbereich><Neu aus vorhandener Arbeitsmappe>. Hier kann die Vorlage.xls in den Startordner abgelegt werden. Siehe <Extras><Optionen><Allgemein><Standardspeicherort>


back-to-topScript für komfortablen Makro-Import
So, und damit Du jetzt nicht jede Excel-Datei einzeln öffnen, Makro einfügen und wieder speichern musst, habe ich Dir ein kleines Script geschrieben, mit dem Du das Ganze eigenlich recht komfortabel umsetzen kannst. D.h. Du kannst eine Verknüpfung auf dem Desktop, auf der Schnell-Startleiste (sofern eingerichtet) und im SendTo-Ordner <D:\Dokumente und Einstellungen\User\SendTo> erstellen und *.xls-Dateien oder ganze Ordner auf die Verknüfung ziehen oder mit Rechtsklick per SendTo an das Script übergeben. Oder per Batch <cscript /nologo *.vbs arg...) Allerdings ist zu beachten, das nur maximal 40 Argumente an das Script übergeben werden dürfen. Bei mehr passiert nix und es gibt ne Fehlermeldung.


back-to-topFunktion des Scripts
  • Es wird explizit geprüft, ob es sich um eine *.xls-Datei handelt. D.h. Ordner dürfen auch andere Dateien beinhalten.
  • Die Dateien werden nicht sichtbar geöffnet.
  • Die Dateien werden auf verschiedene Kriterien geprüft und dem entsprechend das Makro eingefügt oder auch nicht.
  • Die jeweiligen Aktionen werden in einer Log-File ptotokolliert und am Ende übersichtlich in einem Fenster angezeigt.


back-to-topFolgende Meldungen werden generiert
  • Mappe konnte nicht geöffnet werden
  • Mappe konnte nur gelesen werden (ReadOnly) schreibgeschützt, gesperrt...
  • Mappe falsches Format oder defekt
  • Makro wurde erfolgreich erstellt
  • Makro hatte bereits existiert

Diesen Quelltext in x-beliebigen Ordner unter *.vbs abspeichern und testen:
Option Explicit

Const BoxWidth = 700
Const BoxHeight = 400

Const FontType = "Arial"  
Const FontSize = 13

Const Col1Width = 230

Const BackColor = "#F0F0F0"  

Const Mld1 = "Argumente fehlen..."  
Const Msg1 = "Es wurden keine Argumente übergeben!"   

Const Log0 = "Erstellt am "  
Const Log1 = "Mappe: Konnte nicht geöffnet werden"  
Const Log2 = "Mappe: Konnte nur gelesen werden"  
Const Log3 = "Mappe: Falsches Format oder defekt"  
Const Log4 = "Makro: Wurde erfolgreich erstellt"  
Const Log5 = "Makro: Hatte bereits existiert"  

Const Color0 = "#00008B"  'Blue1  
Const Color1 = "#FF1010"  'Red1  
Const Color2 = "#7A378B"  'Violet1  
Const Color3 = "#FF1010"  'Red1  
Const Color4 = "#006400"  'Green1  
Const Color5 = "#006400"  'Green1  

'   Red1 = "#FF1010"		  
'   Red2 = "#FF2020"  
'  Blue1 = "#00008B"  
'  Blue2 = "#473C8B"  
' Green1 = "#006400"  
' Green2 = "#008B00"  
'Violet1 = "#7D26CD"  
'Violet2 = "#7A378B"  
'Orange1 = "#FF8C00"  


Dim Arg, Args, Fso, Folder, File, Path, Excel, Wkb, Log, Shell


    Set Excel = CreateObject("Excel.Application")  
    Set Fso = CreateObject("Scripting.FileSystemObject")  

    Call OpenLog 

    For Each Arg In WScript.Arguments
        If LCase(Right(Arg, 4)) = ".xls" Then  
            Args = True:  Call CreateExcelMakro(Arg)
        ElseIf Fso.FolderExists(Arg) Then
            Args = True:  Set Folder = Fso.GetFolder(Arg)
            For Each File In Folder.Files
                If LCase(Right(File, 4)) = ".xls" Then Call CreateExcelMakro(File.Path)  
            Next
        End If
    Next

    Set Excel = Nothing  

    If Args = True Then Call ShowLog Else MsgBox Msg1, vbInformation, Mld1
    
    Wscript.Quit

Sub CreateExcelMakro(ByRef File)
    Dim vba1, vba2

    vba1 = "Private Sub Workbook_BeforeClose(Cancel As Boolean)" & vbCr & vbTab & "If ThisWorkbook.Saved = "  
    vba2 = "False Then ThisWorkbook.SaveCopyAs(ThisWorkbook.FullName & "".bak"")" & vbCr & "End Sub" & vbCr  

    On Error Resume Next
    
    Set Wkb = Excel.Workbooks.Open(File)
    
    If Wkb Is Nothing Then
        Call WriteLog(Log1, File, Color1)
    Else
        With Wkb.VBProject.VBComponents(1).CodeModule
            If IsEmpty(.ProcBodyLine("Workbook_BeforeClose", 0)) Then  
                Err.Clear
                If Wkb.ReadOnly = True Then
                    Call WriteLog(Log2, File, Color2)
                Else
                   .AddFromString vba1 & vba2:  If Err = 0 Then Wkb.Save
                    If Wkb.Saved = False Then Call WriteLog(Log3, File, Color3) Else Call WriteLog(Log4, File, Color4)
                End If
            Else
                Call WriteLog(Log5, File, Color5)
            End If
        End With
        Excel.DisplayAlerts = False:  Wkb.Close:  Excel.DisplayAlerts = True:  Set Wkb = Nothing
    End If
End Sub

Private Sub OpenLog()
    Path = Fso.GetParentFolderName(WScript.ScriptFullName) & "\Log.Hta"  
    Set Log = Fso.CreateTextFile(Path)

    With Log
        .WriteLine "<html>"  
        .WriteLine "<head>"  
        .WriteLine "<title>Zusammenfassung</title>"  
        .WriteLine "<SCRIPT Language='VBScript'>"  
        .WriteLine "BoxLeft = (Screen.Width - " & BoxWidth & ") / 2"   
        .WriteLine "BoxTop = (Screen.Height - " & BoxHeight & ") / 2"   
        .WriteLine "window.resizeTo " & BoxWidth & ", " & BoxHeight  
        .WriteLine "window.moveTo BoxLeft, BoxTop"  
        .WriteLine "</SCRIPT>"  
        .WriteLine "<HTA:APPLICATION"   
        .WriteLine "ID='objLog'"  
        .WriteLine "APPLICATIONNAME='Log-Ausgabe'"  
        .WriteLine "SCROLL='yes'"  
        .WriteLine "SINGLEINSTANCE='yes'>"  
        .WriteLine "<body bgcolor='" & BackColor & "' style='font-family:" & FontType & ";font-size:" & FontSize & "px'>"  
        .WriteLine "<font color='" & Color0 & "'>" & Log0 & Now & "</font><br><br>"  
        .WriteLine "<table width='100%' cellSpacing=1 border=1 style='font-family:" & FontType & ";font-size:" & FontSize & "px'>"   
    End With
End Sub

Private Sub WriteLog(ByRef Text, ByRef File, ByRef Color)
    Log.WriteLine "<tr><td width='" & Col1Width & "' style='color=" & Color & "'>" & Text & "</td><td style='color=0'>" & File & "</td></tr>"  
End Sub

Private Sub ShowLog()
    Log.WriteLine "</table></body></html>":  Log.Close  
    Set Shell = CreateObject("Wscript.Shell"):  Shell.Run Path, 1, False  
End Sub

Gruß Dieter