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

Datei wurde nicht gespeichert '1004'

Forumthread: Datei wurde nicht gespeichert '1004'

Datei wurde nicht gespeichert '1004'
13.08.2006 12:01:31
Stefan
Hallo,
kennt jemand eine Lösung für folg. Effekt.
Per Makro wird ein Tabellenblatt gelöscht, worauf sich danach nicht mehr die Datei speichern lässt.
...
ThisWorkbook.Sheets("Tabelle2").Delete
ThisWorkbook.Save
Laufzeitfehler '1004':
Datei wurde nicht gespeichert.
Gruß, Stefan
Anzeige

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Datei wurde nicht gespeichert '1004'
13.08.2006 13:30:03
ChrisL
Hallo Stefan
Ich glaube nicht, dass dein Save-Problem in Zusammenhang mit Delete steht (mach mal eine Trockenübung). Vielleicht ist die Ursache ganz banal z.B. keine Schreibberechtigung. Ansonsten könnte ich mir Vorstellen, dass dein übriger Code zu optimieren wäre z.B. wenn sehr grosse Breiche kopiert werden oder ähnlich.
Manchmal hilft es auch die Mappe zu "säubern" d.h. neue Mappe anlegen und Tabellenblätter, Codes etc. einzeln in die neue Mappe kopieren. Leere Bereiche z.B. Zeile 100:65536 markieren und löschen (ganze Zeile löschen nicht nur Inhalt).
Gruss
Chris
Anzeige
AW: Datei wurde nicht gespeichert '1004'
13.08.2006 14:26:51
Stefan
Hi Chris,
"Schreibschutz" habe ich probiert - der ist's nicht.
"Kopieren" soll erst danach, also nach dem Blatt löschen erfogen. Scheidet also auch aus.
Das verrückte ist, das Makro lief schon mal mit diesem Code.
Hier der Code, fällt DIR dabei etwas auf ?
Sub einlesen()
Dim st_b As Variant, st_z As Variant, st_a As Variant, wks As Worksheet
st_b = Array("05 b d0", "05 b d1", "05 b d2", "05 b d3", "05 b d4", "05 b d5")
st_z = Array("05 d0", "05 d1", "05 d2", "05 d3", "05 d4", "05 d5")
st_a = Array("akt d0", "akt d1", "akt d2", "akt d3", "akt d4", "akt d5")
For Each wks In ThisWorkbook.Sheets
wks.Visible = -1
Next wks
If Application.Dialogs(xlDialogOpen).Show("bestände.xls", False, True) = False Then Exit Sub
ThisWorkbook.Sheets(st_b(0)).Delete
ThisWorkbook.Unprotect
ThisWorkbook.Save
>>> Fehlermeldung Activesheets(1).Move After:=Workbooks(ThisWorkbook.Name).Sheets(ThisWorkbook.Sheets.count)
...
Gruß, Stefan
Anzeige
AW: Datei wurde nicht gespeichert '1004'
13.08.2006 15:27:01
ChrisL
Hallo Stefan
Nein, da fällt mir auch nichts auf. Aber insbesondere weil der Code schonmal lief, würde ich eine neue Mappe nehmen (Stichwort "säubern").
Gruss
Chris
AW: Datei wurde nicht gespeichert '1004'
13.08.2006 15:38:34
Horst
Hi,
der Code kann so ohne Fehlermeldung nicht gelaufen sein.
mfg Horst
@Horst - warum nicht?
13.08.2006 15:46:53
ChrisL
Hallo Horst
Reine Neugier ;-)
Gruss
Chris
Anzeige
AW: @Horst - warum nicht?
13.08.2006 18:02:58
Horst
Hi,
ausprobieren!
mfg Horst
AW: @Horst - warum nicht?
14.08.2006 08:58:25
ChrisL
Hallo Horst
Habe längst ausprobiert und läuft. Oder habe ich die Fehlermeldung übersehen? ;-)
Gruss
Chris
AW: Datei wurde nicht gespeichert '1004'
13.08.2006 19:44:19
Gerd
Hallo Stefan,

Sub einlesen()
Dim st_b As Variant, st_z As Variant, st_a As Variant, wks As Worksheet
st_b = Array("Tabelle6", "05 b d1", "05 b d2", "05 b d3", "05 b d4", "05 b d5")
st_z = Array("05 d0", "05 d1", "05 d2", "05 d3", "05 d4", "05 d5")
st_a = Array("akt d0", "akt d1", "akt d2", "akt d3", "akt d4", "akt d5")
For Each wks In ThisWorkbook.Sheets
wks.Visible = -1
Next wks
If Application.Dialogs(xlDialogOpen).Show("060812.xls", False, True) = False Then Exit Sub
ThisWorkbook.Sheets(st_b(0)).Delete
ThisWorkbook.Unprotect
ThisWorkbook.Save
End Sub

'>>> Fehlermeldung 'Activesheets(1).Move After:=Workbooks(ThisWorkbook.Name).Sheets(ThisWorkbook.Sheets.Count)
Bis dahin läuft dein Code, den ich für meinen Test gerinfügig
abgeändert habe.
Allerdings natürlich nur einmal bzw. solange das "Tabellenblatt6"
existiert.
Wegen ActiveSheet und Move guckt mal in der Hilfe.
Oder schreibe mal nach "...Save",
da wo bei Dir "Fehlermeldung" steht zum Testen
Debug.Print "ActiveWorkbook.Name"
Debug.Print "ActiveSheet.Name"
Debug.Print "Activesheets(1).Name"
Exit Sub
Gruß
Gerd
Anzeige
AW: Datei wurde nicht gespeichert '1004'
13.08.2006 20:42:58
Stefan
Hallo Gerd,
ich komme gar nicht über Thisworkbook.save hinaus. Dort kommt schon die Fehlermeldung.
Wie gehe ich mit den Debug-Anwiesungen um, was bewirken diese?
Gruß, Stefan
AW: Datei wurde nicht gespeichert '1004'
13.08.2006 20:56:43
Gerd
Hallo Stefan,
diese bewirken, dass der Wert des dahinter angegebenen Ausdrucks bzw. Variable
im VBA-Editor im Direktfenster ausgegeben wird.
(im VBA-Editor unter "Ansicht" einzublenden).
P.S. Ist das zu löschende Sheet beim Start des Makros noch vorhanden ?
Gruß
Gerd
Anzeige
AW: Datei wurde nicht gespeichert '1004'
14.08.2006 09:19:26
Stefan
Hallo Gerd,
danke, das ist gut - hab wieder dazu gelernt.
Sehe damit auch, das die Variablen alle richtig belegt sind.
Ich glaube aber nicht, das dort die Ursache liegt. Ich kann problemlos die Plazierung der Befehle verändern, die Verweigerung die Datei speichern zu können kommt grundsätzlich erst nach dem das Blatt gelöscht wurde. Also nach:
ThisWorkbook.Sheets(st_b(i)).Delete
Ja, das Sheet ist noch beim Makrostart vorhanden.
Gruß, Stefan
Anzeige
AW: Datei wurde nicht gespeichert '1004'
14.08.2006 11:28:28
Gerd
Hallo Stefan,
schreibe mal "Unprotect("") vor die Zeile mit "Delete" und wenn Du
ein Passwort vergeben hast, dann " Unprotect("Passworttext") "
Gruß
Gerd
AW: Datei wurde nicht gespeichert '1004'
14.08.2006 11:39:26
Stefan
Hallo Gerd,
:o) das hatte ich schon im Quelltext - ging auch nicht.
Es lässt sich solange speichern bis der .Delete-Befehl abgearbeitet wurde, ab dann nicht mehr. -- unklar, oder --
Sub einlesen()
Dim st_b As Variant, wks As Worksheet
st_b = Array("05 b d0", "05 b d1", "05 b d2", "05 b d3", "05 b d4", "05 b d5")
For Each wks In ThisWorkbook.Sheets
wks.Visible = -1
Next wks
If Application.Dialogs(xlDialogOpen).Show("bestände.xls", False, True) = False Then Exit Sub
ThisWorkbook.Sheets(st_b(0)).Delete
ThisWorkbook.Unprotect
ThisWorkbook.Save
>>> Fehlermeldung
Anzeige
AW: Datei wurde nicht gespeichert '1004'
14.08.2006 12:39:00
Gerd
Hallo Stefan,
nimm mal eine neue Mappe, ohne jeden Schutz, übernehme deinen Code,
kommentiere aber für den Anfang jeden Befehl mit Protect, Unprotect
und Save mit "'" ganz links in den entsprechenden Codezeilen aus
und teste schrittweise.
Gruß
Gerd
AW: Datei wurde nicht gespeichert '1004'
14.08.2006 12:31:03
Stefan
Hallo Gerd,
Problem erkannt.
Hab's auf'nem anderen Rechner laufen lassen und eine aussagefähigere Fehlermeldung erhalten.
Das Problem war:
Es gibt einen Listboxbezug ( .ListFillRange ) auf das zu löschende Blatt, der das Speichern nach dem Blattlöschen, durch den ungültige Bezug verhindert !!!
Trotzdem vielen Dank für Eure Hilfe und Anteilnahme ;o)
Gruß, Stefan.
Anzeige
;

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

Infobox / Tutorial

Laufzeitfehler 1004: Dokument wurde nicht gespeichert in Excel VBA beheben


Schritt-für-Schritt-Anleitung

  1. Fehler identifizieren: Wenn du den Laufzeitfehler '1004' erhältst, kann dies oft daran liegen, dass ein Blatt gelöscht wird, während eine Referenz auf dieses Blatt noch besteht.

  2. Code anpassen: Überprüfe den VBA-Code. Stelle sicher, dass alle Referenzen zu dem zu löschenden Blatt entfernt werden, bevor du das Blatt mit ThisWorkbook.Sheets("Tabelle2").Delete löschst.

  3. Unprotect vor Delete: Vergewissere dich, dass du die Arbeitsmappe mit ThisWorkbook.Unprotect vor dem Löschen des Blattes entsperrst.

  4. Debuggen: Füge Debug-Anweisungen ein, um zu überprüfen, wo der Fehler auftritt. Beispiel:

    Debug.Print "ActiveWorkbook.Name"
    Debug.Print "ActiveSheet.Name"
  5. Mappe "säubern": Wenn das Problem weiterhin besteht, kann es helfen, eine neue Arbeitsmappe zu erstellen und die Inhalte schrittweise zu übertragen.


Häufige Fehler und Lösungen

  • Schreibschutz: Überprüfe, ob die Excel-Datei schreibgeschützt ist. Dies kann zu der Meldung "Das Dokument wurde nicht gespeichert" führen.
  • Referenzen auf gelöschte Blätter: Achte darauf, dass keine Listbox-Referenzen oder andere Verknüpfungen auf das zu löschende Blatt bestehen.
  • Ungültige Bereiche: Wenn du große Bereiche oder leere Zeilen kopierst, kann dies ebenfalls zu Problemen führen. Lösche leere Zeilen und Bereiche, bevor du speicherst.

Alternative Methoden

  • Manuelles Speichern: Versuche, die Datei manuell zu speichern, um festzustellen, ob das Problem im VBA-Code oder in der Datei selbst liegt.
  • VBA-Fehlerbehandlung: Implementiere eine Fehlerbehandlung in deinem Code, um spezifische Fehler abzufangen. Beispiel:

    On Error GoTo ErrorHandler
    ' Dein VBA Code hier
    Exit Sub
    ErrorHandler:
    MsgBox "Fehler Nummer: " & Err.Number & " - " & Err.Description

Praktische Beispiele

Hier ist ein einfaches Beispiel, wie du den Laufzeitfehler 1004 vermeiden kannst:

Sub einlesen()
    Dim st_b As Variant
    Dim wks As Worksheet

    st_b = Array("05 b d0", "05 b d1")

    ' Arbeitsmappe entsperren
    ThisWorkbook.Unprotect

    ' Blätter sichtbar machen
    For Each wks In ThisWorkbook.Sheets
        wks.Visible = xlSheetVisible
    Next wks

    ' Blatt löschen
    ThisWorkbook.Sheets(st_b(0)).Delete

    ' Speichern
    ThisWorkbook.Save
End Sub

Tipps für Profis

  • Verwende Option Explicit: Dies hilft, Fehler durch nicht deklarierte Variablen zu vermeiden.
  • Regelmäßige Backups: Mache regelmäßig Backups deiner Excel-Dateien, um Datenverlust zu vermeiden.
  • VBA-Referenzen überprüfen: Stelle sicher, dass alle externen Verknüpfungen und Referenzen im Code korrekt sind, um Laufzeitfehler zu vermeiden.

FAQ: Häufige Fragen

1. Was bedeutet Laufzeitfehler 1004?
Der Laufzeitfehler 1004 tritt auf, wenn Excel ein Dokument nicht speichern kann, oft aufgrund von Referenzen auf gelöschte Objekte oder fehlenden Berechtigungen.

2. Wie kann ich den Fehler debuggen?
Füge Debug.Print-Anweisungen in deinen Code ein, um den Status von Variablen und Objekten zu überprüfen, bevor der Fehler auftritt.

3. Was kann ich tun, wenn die Datei nicht gespeichert werden kann?
Überprüfe, ob die Datei schreibgeschützt ist oder ob es noch Referenzen auf gelöschte Blätter gibt. Eine neue Mappe zu erstellen und den Code dort zu testen, kann ebenfalls hilfreich sein.

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