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

Forumthread: Schliessen ohne Speichern ? Nachfrage

Schliessen ohne Speichern ? Nachfrage
Urs
Guten Tag
Wie ergänze ich das Macro richtig damit der Ursprung der Tabelle erhalten bleibt.
  • 
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
    *  Hier der Befehl zum Schliessen ohne Speichern und ohne Nachfragen, ob gespeichert
    *  werden soll.
    End Sub
    


  • Gruss urs
    Anzeige
    ActiveWorkbook.Close savechanges = True
    08.12.2011 15:07:41
    robert
    Da ging was schief: OHNE SPEICHERN
    08.12.2011 15:14:08
    Urs
    Hallo robert
    Die Antwort kam schnell und ich bin für die Syntax dankbar, a b e r
    ich will schliessen ohne zu speichern, den die Tabelle soll beim Aufrufen immer dieselben Ursprungswerte haben.
    Gruss Urs
    was ging schief ? oT
    08.12.2011 15:16:25
    robert
    Anzeige
    Es hat die Änderungen gespeichert o.T.
    08.12.2011 15:49:42
    Urs
    FALSE statt TRUE owT
    08.12.2011 15:50:37
    Rudi
    := sind auch noch erwünscht
    08.12.2011 15:56:23
    Urs
    Jep
    Und mit ....savechange:= False sagt der Debugger auch nichts mehr!!
    ohne := reklamierte er nur!!
    Vielen Dank für Eure Hilfe. Gruss Urs
    Anzeige
    @Rudi, warum funkt das?
    08.12.2011 16:02:25
    robert
    
    Sub schl_ohne() ' schliessen ohne Änderungen
    ActiveWorkbook.Close savechanges = True
    End Sub
    
    Sub schl_mit()' schlöiessen mit Änderungen
    ActiveWorkbook.Close savechanges = False
    End Sub
    
    Gruß
    robert
    Warum funkt das?
    08.12.2011 16:44:51
    Erich
    Hi Robert,
    das ist eigentlich klar.
    Wenn da "savechanges:=True" steht, sieht VBA eine Wertzuweisung an einen Parameter savechanges.
    Wenn da "savechanges=True" steht, sieht VBA keine solche Wertzuweisung.
    savechanges wird als Variable verwendet, und "savechanges=True" wird als normaler Ausdruck ausgewertet.
    Das Ergebnis des Ausdrucks "savechanges=True" ist False,
    also wird aus der Anweisung
    ActiveWorkbook.Close savechanges = True
    die Anweisung
    ActiveWorkbook.Close False
    Das ist die Kurzform von
    ActiveWorkbook.Close savechanges:=False
    oder
    ActiveWorkbook.Close savechanges:=(savechanges = True)
    Übrigens; Dieser "Scherz", dieses Missverständnis geht nur, weil "Option Explicit" im Modul fehlt...
    Alles klar?
    Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich
    Anzeige
    Danke Erich-Option Explicit vergess ich "fast" nie
    08.12.2011 16:49:35
    robert
    AW: Schliessen ohne Speichern ? Nachfrage
    08.12.2011 15:24:21
    dan
    Hallo urs,
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
    *  Hier der Befehl zum Schliessen ohne Speichern und ohne Nachfragen, ob gespeichert
    *  werden soll.
    ThisWorkbook.Close False
    End Sub
    
    Gruss dan
    Möglich
    08.12.2011 16:02:28
    Urs
    Hallo dan
    Hab mich zu der mit robert und rudi zusammengestellten Version entschieden.
    Braucht es vor Deinem False nicht noch ein savechange:= ?
    trotzdem vielen Dank. gruss urs
    Anzeige
    AW: Möglich
    08.12.2011 16:54:20
    dan
    Hallo Urs,
    es ist vollkommen richtig wenn man den Argument-Namen benutzt, also:
    workbook.Close SaveChanges:=False
    Aber wenn man die Reihenfolge der Argumente einhaelt, dann kann man die Function Close auch ohne den Argument Namen rufen, also:
    workbook.Close False
    Aber mit dem Name ist es definitiev besser und der Code ist verstendlicher so.
    Gruss dan, cz.
    Anzeige
    muss nicht
    08.12.2011 16:56:40
    Erich
    Hi Urs,
    nein, das vorangestellte "savechanges:=" ist nicht nötig. ASchau mal in die VBA-Hilfe unter
    "Aufrufen von Sub- und Function-Prozeduren" (fundest du, wenn du in der Hilfe nach Funktion suchst).
    Zitat:
    Verwenden von Klammern beim Aufruf von Function-Prozeduren
    Damit Sie den Rückgabewert einer Funktion verwenden können, weisen Sie die Funktion einer Variablen zu,
    und schließen Sie die Argumente in Klammern ein. Beispiel:
    Antwort3 = MsgBox("Sind Sie mit Ihrem Gehalt zufrieden?", 4, "Frage 3")
    Wenn der Rückgabewert einer Funktion für Sie bedeutungslos ist, können Sie eine Funktion auf die gleiche Weise aufrufen,
    wie Sie eine Sub-Prozedur aufrufen. Lassen Sie die Klammern weg, listen Sie die Argumente auf,
    und weisen Sie die Funktion keiner Variablen zu. Beispiel:
    MsgBox "Aufgabe erledigt!", 0, "Aufgabe-Dialogfeld"
    Vorsicht Wenn Sie im vorhergehenden Beispiel Klammern angeben, verursacht die Anweisung einen Syntax-Fehler.
    Übergeben von benannten Argumenten
    Eine Anweisung in einer Sub- oder Function-Prozedur kann Werte an aufgerufene Prozeduren
    unter Verwendung von benannten Argumenten übergeben. Sie können die benannten Argumente
    in beliebiger Reihenfolge auflisten. Ein benanntes Argument besteht aus dem Namen des Arguments
    gefolgt von einem Doppelpunkt und einem Gleichheitszeichen (:=) sowie einem dem Argumente
    zugewiesenen Wert.
    In dem folgenden Beispiel wird die MsgBox-Funktion unter Verwendung von benannten Argumenten
    ohne Rückgabewert aufgerufen.
    MsgBox Title:="Aufgabe-Dialogfeld", Prompt:="Aufgabe erledigt!"
    In dem folgenden Beispiel wird die MsgBox-Funktion unter Verwendung von benannten Argumenten aufgerufen.
    Der Rückgabewert wird der Variablen Antwort3 zugewiesen.
    Antwort3 = MsgBox(Title:="Frage 3", _
    Prompt:="Sind Sie mit Ihrem Gehalt zufrieden?", Buttons:=4)
    (Ende des Zitats)
    Alles klar?
    Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich
    Anzeige
    ;

    Forumthreads zu verwandten Themen

    Anzeige
    Anzeige
    Anzeige
    Anzeige
    Anzeige
    Anzeige

    Infobox / Tutorial

    Schließen ohne Speichern in Excel VBA


    Schritt-für-Schritt-Anleitung

    Um eine Excel-Datei über VBA zu schließen, ohne eine Rückfrage oder Änderungen zu speichern, kannst Du folgende Schritte befolgen:

    1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
    2. Füge ein neues Modul hinzu, indem Du mit der rechten Maustaste auf "VBAProject (DeinDokument)" klickst und "Modul einfügen" wählst.
    3. Kopiere den folgenden VBA-Code in das Modul:
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
        ThisWorkbook.Close SaveChanges:=False
    End Sub
    1. Schließe den VBA-Editor und speichere Deine Änderungen.
    2. Nun wird die Datei ohne Rückfrage geschlossen, wenn Du Excel schließt.

    Häufige Fehler und Lösungen

    • Fehler: Excel fragt beim Schließen nach, ob die Änderungen gespeichert werden sollen.

      • Lösung: Stelle sicher, dass Du SaveChanges:=False verwendest. Der Code sollte so aussehen:
        ActiveWorkbook.Close SaveChanges:=False
    • Fehler: Der Code wird im Debugger als Fehler angezeigt.

      • Lösung: Überprüfe, ob Du die korrekte Syntax verwendest. SaveChanges:=False muss mit dem Doppelpunkt geschrieben werden.
    • Fehler: Das Programm schließt nicht wie gewünscht.

      • Lösung: Stelle sicher, dass das Makro im richtigen Ereignis (Workbook_BeforeClose) platziert ist.

    Alternative Methoden

    Wenn Du eine Datei schließen möchtest, ohne sie zu speichern, gibt es auch andere Ansätze:

    • Verwende das ActiveWorkbook-Objekt, um die Datei zu schließen:

      Sub SchliessenOhneSpeichern()
      ActiveWorkbook.Close SaveChanges:=False
      End Sub
    • Du kannst auch das Dialogfeld beim Schließen unterdrücken, indem Du den Cancel-Parameter im Workbook_BeforeClose-Ereignis verwendest:

      Private Sub Workbook_BeforeClose(Cancel As Boolean)
      Cancel = True ' Verhindert das Schließen
      ThisWorkbook.Close SaveChanges:=False
      End Sub

    Praktische Beispiele

    Hier sind einige praktische Beispiele, um die Datei ohne Speichern zu schließen:

    1. Schließen ohne Rückfrage und ohne speichern:

      Sub SchliessenOhneSpeichern()
          ActiveWorkbook.Close SaveChanges:=False
      End Sub
    2. Schließen und dabei sicherstellen, dass keine Änderungen gespeichert werden:

      Sub SchliessenMitVerifikation()
          If MsgBox("Möchten Sie die Änderungen speichern?", vbYesNo) = vbNo Then
              ActiveWorkbook.Close SaveChanges:=False
          End If
      End Sub

    Tipps für Profis

    • Verwendung von Option Explicit: Füge immer Option Explicit zu Beginn Deines Moduls hinzu, um Variablen zu deklarieren. Dies hilft, Fehler zu vermeiden.
    • Testen von Makros: Teste Deine Makros in einer Kopie Deiner Datei, um Datenverluste zu vermeiden.
    • Dokumentation: Kommentiere Deinen Code, damit Du später nachvollziehen kannst, was jede Zeile bewirken soll.

    FAQ: Häufige Fragen

    1. Wie verhindere ich, dass Excel beim Schließen nach dem Speichern fragt? Um zu verhindern, dass Excel beim Schließen nach dem Speichern fragt, kannst Du ThisWorkbook.Close SaveChanges:=False verwenden.

    2. Ist es möglich, eine Datei mit Änderungen zu speichern und dann zu schließen? Ja, Du kannst ActiveWorkbook.Close SaveChanges:=True verwenden, um die Änderungen zu speichern und die Datei zu schließen.

    3. Was passiert, wenn ich SaveChanges:=True verwende? Wenn Du SaveChanges:=True verwendest, werden alle Änderungen in der Arbeitsmappe gespeichert, bevor sie geschlossen wird.

    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