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

Datei ersetzen?-Meldung unterdrücken

Forumthread: Datei ersetzen?-Meldung unterdrücken

Datei ersetzen?-Meldung unterdrücken
07.01.2016 13:49:51
Robin
Hallo,
ich möchte ein Workbook unter gleichem Namen abspeichern und dabei folgende Fehlermeldung unterdrücken und mit "Ja" beantworten:
"Eine Datei mit dem Namen '..xlsm' ist bereits an diesem Speicherort vorhanden. Soll sie ersetzt werden?"
Es geht um eine Schreibgeschützte Mappe, die von einigen Usern gleichzeitig geöffnet ist, wobei die einzige Möglichkeit der Änderung ein Makro ist, welches den Schutz aufhebt, die Datei unter identischem Namen überschreibt und sodann wieder (bis zum Schließen mit ThisWorkbook.Saved=True) Schreibgeschützt ist.
PS: Warum wird der Parameter "Filename" autovervollständigt, und "WriteResPassword" nicht einmal groß geschrieben, beziehungsweise durch STRG+Leer vervollständigt? Muss ich das Ganze in Klammern setzen, oder fehlt evtl. noch ein zugehöriger Parameter?
Liebe Grüße,
Robin
Sub ZelleAendern()
UserForm1.Show
ThisWorkbook.ChangeFileAccess Mode:=xlReadWrite
ThisWorkbook.SaveAs Filename:="pfad\..xlsm", writerespassword:="1"
ThisWorkbook.ChangeFileAccess Mode:=xlReadOnly
End Sub

Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Datei ersetzen?-Meldung unterdrücken
07.01.2016 18:22:18
Nepumuk
Hallo,
das sollte funktionieren:
Sub ZelleAendern()
    UserForm1.Show
    With ThisWorkbook
        .ChangeFileAccess Mode:=xlReadWrite
        .Save
        .ChangeFileAccess Mode:=xlReadOnly
    End With
End Sub

Zu deinem PS: Filename ist auch eine Eigenschaft z.B. der Graphic-Klasse daher wird es richtig geschrieben. WriteResPassword ist "nur" ein Parameter und die werden grundsätzlich nicht richtig gestellt.
Gruß
Nepumuk

Anzeige
AW: Datei ersetzen?-Meldung unterdrücken
08.01.2016 07:13:24
Robin
Hallo Nepumuk,
das mit dem PS hört sich plausibel an, Danke!
Zu dem Code:
Genau so hatte ich es zuerst auch zu lösen versucht, das Problem ist allerdings, dass die Mappe dann beim nächsten Öffnen nicht mehr Schreibgeschützt ist, weshalb ich den Weg über .SaveAs gehen wollte. Händisch funktioniert das Ganze, bzw. auch wenn der User die richtige Antwort "Ja" auswählt. Da ich darauf allerdings nicht vertrauen möchte, hätte ich die Meldung lieber unterdrückt und automatisch mit "Ja" beantwortet. Gibt es dazu eine Möglichkeit?
Grüße,
Robin

Anzeige
AW: Datei ersetzen?-Meldung unterdrücken
08.01.2016 08:37:58
Nepumuk
Hallo Robin,
ich kann dir nicht ganz folgen, wo soll der User auf "Ja" klicken? Setzt du den Readonly-Zugriff nicht per Makro beim Öffnen der Mappe
Gruß
Nepumuk

AW: Datei ersetzen?-Meldung unterdrücken
08.01.2016 12:55:13
Robin
Hallo Nepumuk,
den Schreibschutz hatte ich lediglich per Hand vergeben unter Datei/Speichern unter/Tools/Allgemeine Optionen.
Wenn der User die Datei Schreibgeschützt öffnet, hat er nur die Möglichkeit die zugelassenen Änderungen zu speichern, indem er per Button eine Userform aufruft, welche die oben genannte Routine startet.
Sub AufbewahrungAendern()
UserForm1.Show
ThisWorkbook.ChangeFileAccess Mode:=xlReadWrite
ThisWorkbook.SaveAs Filename:="pfad\..xlsm", WriteResPassword:="1"
ThisWorkbook.ChangeFileAccess Mode:=xlReadOnly
End Sub
Darauf folgt dann eine Meldung, die ich unterdrücken möchte:
"Eine Datei mit dem Namen '..xlsm' ist bereits an diesem Speicherort vorhanden. Soll sie ersetzt werden?" ->"Ja", "Nein", "Abbrechen"
Ich weiß, das ganze ist umständlich, hat aber bis auf diese Meldung funktioniert - die Feinheit wäre nun, diese Meldung zu unterdrücken und Excel automatisch mit "Ja" auf oben genannte Meldung zu antworten.
Beim Öffnen habe ich den Readonly Zugriff nicht gesetzt, da ich mich damit jetzt schon mehrmals aus der Datei ausgeschlossen habe (ich bekomme sie NUR noch schreibgeschützt auf):
[Diese Arbeitsmappe]
Private Sub Workbook_Open()
ThisWorkbook.ChangeFileAccess Mode:=xlReadOnly
End Sub

[Modul]
Sub AufbewahrungAendern()
UserForm1.Show
ThisWorkbook.ChangeFileAccess Mode:=xlReadWrite
ThisWorkbook.Save
ThisWorkbook.ChangeFileAccess Mode:=xlReadOnly
End Sub
1)Schreibgeschützt Öffnen => Schreibgeschützt
2)Passwort eingeben -> "Änderungen vor dem Wechseln des Dateistatus speichern?" -> "Ja" => Schreibgeschützt
3)Passwort eingeben -> "Änderungen vor dem Wechseln des Dateistatus speichern?" -> "Nein" => Schreibgeschützt
4) Schreibgeschützt Öffnen => Laufzeitfehler #1004 'Die Methode ChangeFileAccess' für das Objekt '_Workbook' ist fehlgeschlagen -> "Beenden", "Debuggen", "Hilfe"
Markiert ist die Zeile:

ThisWorkbook.ChangeFileAccess Mode:=xlReadOnly
Deshalb hatte ich auch diesen Lösungsansatz verworfen, aber vielleicht kannst du mir ja sagen, wo mein Fehler liegt.
Grüße,
Robin

Anzeige
AW: Datei ersetzen?-Meldung unterdrücken
08.01.2016 14:59:50
Nepumuk
Hallo,
versuch es mit:
Application.DisplayAlerts = False
nicht vergessen, nach dem Speichern wider auf True setzen.
Gruß
Nepumuk

AW: Datei ersetzen?-Meldung unterdrücken
11.01.2016 08:14:12
Robin
Hallo Nepumuk,
damit funktioniert es nun endlich. Vielen lieben Dank noch einmal für deine Hilfe!
Grüße,
Robin
;
Anzeige
Anzeige

Infobox / Tutorial

Datei ersetzen?-Meldung unterdrücken in Excel


Schritt-für-Schritt-Anleitung

Um die Fehlermeldung beim Speichern einer Excel-Datei zu unterdrücken, kannst du den folgenden VBA-Code verwenden. Dieser Code stellt sicher, dass die Warnmeldung "Eine Datei mit dem Namen '..xlsm' ist bereits an diesem Speicherort vorhanden. Soll sie ersetzt werden?" automatisch mit "Ja" beantwortet wird.

Sub ZelleAendern()
    UserForm1.Show
    Application.DisplayAlerts = False ' Warnmeldungen ausschalten
    ThisWorkbook.ChangeFileAccess Mode:=xlReadWrite
    ThisWorkbook.SaveAs Filename:="pfad\..xlsm", WriteResPassword:="1"
    ThisWorkbook.ChangeFileAccess Mode:=xlReadOnly
    Application.DisplayAlerts = True ' Warnmeldungen wieder einschalten
End Sub

Dieser Code stellt sicher, dass dein Workbook in den Schreibmodus gewechselt wird, bevor es gespeichert wird. Beachte, dass du die DisplayAlerts-Eigenschaft auf False setzen musst, um die Warnmeldung zu unterdrücken. Vergiss nicht, sie nach dem Speichern wieder auf True zu setzen.


Häufige Fehler und Lösungen

  • Fehler: Laufzeitfehler #1004

    • Ursache: Dieser Fehler tritt häufig auf, wenn du versuchst, den Dateizugriff auf xlReadOnly zu ändern, während die Datei bereits schreibgeschützt ist.
    • Lösung: Stelle sicher, dass du die Datei im richtigen Zugriffsmodus öffnest, bevor du den Modus änderst.
  • Problem: Warnmeldungen erscheinen trotz DisplayAlerts = False

    • Ursache: Möglicherweise wird der Code nicht in der richtigen Reihenfolge ausgeführt.
    • Lösung: Überprüfe die Reihenfolge der Befehle und stelle sicher, dass DisplayAlerts vor dem Speichern gesetzt wird.

Alternative Methoden

Eine weitere Möglichkeit, die Datei zu speichern, ist die Verwendung von ThisWorkbook.Save anstelle von SaveAs. Dies funktioniert jedoch nur, wenn die Datei bereits im gewünschten Format gespeichert ist:

Sub AufbewahrungAendern()
    UserForm1.Show
    Application.DisplayAlerts = False
    ThisWorkbook.ChangeFileAccess Mode:=xlReadWrite
    ThisWorkbook.Save
    ThisWorkbook.ChangeFileAccess Mode:=xlReadOnly
    Application.DisplayAlerts = True
End Sub

Diese Methode ist einfacher, wenn du die Datei nicht umbenennen oder an einem anderen Ort speichern musst.


Praktische Beispiele

Hier sind zwei Beispiele, die zeigen, wie du den Excel-Speichervorgang automatisieren kannst:

  1. Speichern mit Passwortschutz:

    Sub SpeichernMitPasswort()
        Application.DisplayAlerts = False
        ThisWorkbook.ChangeFileAccess Mode:=xlReadWrite
        ThisWorkbook.SaveAs Filename:="pfad\..xlsm", WriteResPassword:="Passwort123"
        ThisWorkbook.ChangeFileAccess Mode:=xlReadOnly
        Application.DisplayAlerts = True
    End Sub
  2. Automatische Speicherung ohne Benutzerinteraktion:

    Sub AutomatischeSpeicherung()
        Application.DisplayAlerts = False
        ThisWorkbook.ChangeFileAccess Mode:=xlReadWrite
        ThisWorkbook.Save
        ThisWorkbook.ChangeFileAccess Mode:=xlReadOnly
        Application.DisplayAlerts = True
    End Sub

Tipps für Profis

  • Verwende With-Anweisungen: Dies kann deinen Code kürzer und übersichtlicher machen. Beispiel:

    With ThisWorkbook
        .ChangeFileAccess Mode:=xlReadWrite
        .SaveAs Filename:="pfad\..xlsm", WriteResPassword:="1"
        .ChangeFileAccess Mode:=xlReadOnly
    End With
  • Fehlerbehandlung einfügen: Um mögliche Fehler beim Speichern besser zu handhaben, füge eine Fehlerbehandlung hinzu:

    On Error Resume Next
    ' Dein Speichercode hier
    On Error GoTo 0

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass meine Datei immer schreibgeschützt geöffnet wird? Du kannst im Workbook_Open-Ereignis den Zugriff auf schreibgeschützt setzen:

Private Sub Workbook_Open()
    ThisWorkbook.ChangeFileAccess Mode:=xlReadOnly
End Sub

2. Was mache ich, wenn die Datei trotz DisplayAlerts = False nicht gespeichert wird? Überprüfe, ob du die Datei im richtigen Modus geöffnet hast und dass keine anderen Makros oder Add-Ins den Speichervorgang beeinträchtigen.

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