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

BeforeClose(Cancel As Boolean)

Forumthread: BeforeClose(Cancel As Boolean)

BeforeClose(Cancel As Boolean)
08.08.2018 11:05:16
Lino
Guten Tag zusammen,
ich habe diesen Code, der mir aber leider immer speichert, egal ob ich was verändere oder nicht.
Ich möchte gerne, das er mich Abfrägt ( bevor man die Datei schließt ) " Soll diese Daten in zwei Ordner abgespeichert werden ?
Ja Speichern Nein Abbrechen
Ich möchte noch gerne den Excel User als speicher mit drin haben. Wie maches ich das?
Also so Test Lino 08_08:2018_11:58
Private Sub Workbook_BeforeClose(Cancel As Boolean)
ActiveWorkbook.SaveAs Filename:="L:\T\All\Daten\Formular\ Test " & Format(Now, "yyyy_mm_dd_hhmm" _
) & ".xlsb"
ActiveWorkbook.SaveAs Filename:="L:\T\All\Daten\Formular\erl\ Test " & Format(Now, " _
yyyy_mm_dd_hhmm") & ".xlsb"
End Sub
Danke an Alle
Anzeige

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: BeforeClose(Cancel As Boolean)
08.08.2018 11:20:03
daniel
Hi
die Abfrage im Prinzip so:
Select Case Msgbox("in zwei Ordnern speichern?", vbyesnocancel + vbQuestion)
Case vbCancel
Cancel = true 'bei Abbrechen Datei nicht Schließen sondern geöffnet lassen)
Case vbYes
ActiveWorkbook.SaveAs "fileName 1"
ActiveWorkbook.SaveAs "fileName 2"
Case vbNo
end Select
den User bekommst du entweder mit:
Application.Username

oder mit
Environ("Username")
Environ("Username") ist der Windows-Anmeldename
Application.Username ist der Anwendername, der in den Office-Stammdaten eingetragen ist
Gruß Daniel
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Abfrage beim Schließen einer Excel-Datei mit VBA


Schritt-für-Schritt-Anleitung

Um eine Abfrage zu implementieren, bevor die Excel-Datei geschlossen wird, kannst du den folgenden VBA-Code verwenden. Dieser Code fragt den Benutzer, ob er die Datei in zwei Ordnern speichern möchte, und berücksichtigt die Eingabe des Benutzers.

  1. Öffne die Excel-Datei und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Doppelklicke im Projektfenster auf ThisWorkbook, um das Codefenster zu öffnen.
  3. Füge den folgenden Code ein:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Dim response As VbMsgBoxResult
    response = MsgBox("In zwei Ordnern speichern?", vbYesNoCancel + vbQuestion)

    Select Case response
        Case vbCancel
            Cancel = True ' Datei bleibt geöffnet
        Case vbYes
            ' Hier den Dateispeicherort anpassen
            ActiveWorkbook.SaveAs Filename:="L:\T\All\Daten\Formular\Test " & Application.Username & " " & Format(Now, "yyyy_mm_dd_hhmm") & ".xlsb"
            ActiveWorkbook.SaveAs Filename:="L:\T\All\Daten\Formular\erl\Test " & Application.Username & " " & Format(Now, "yyyy_mm_dd_hhmm") & ".xlsb"
        Case vbNo
            ' Datei nicht speichern
    End Select
End Sub
  1. Schließe den VBA-Editor und teste die Funktionalität, indem du die Excel-Datei schließt.

Häufige Fehler und Lösungen

  • Fehler: Datei wird immer gespeichert, auch bei "Nein"

    • Lösung: Stelle sicher, dass du den Cancel-Parameter richtig verwendest. Wenn der Benutzer "Abbrechen" wählt, setze Cancel = True.
  • Fehler: Abfrage erscheint nicht

    • Lösung: Überprüfe, ob der Code im ThisWorkbook-Modul eingefügt wurde. Wenn der Code woanders ist, wird die BeforeClose-Ereignisprozedur nicht ausgelöst.

Alternative Methoden

Eine alternative Methode zur Abfrage vor dem Schließen einer Datei ist die Verwendung des Workbook_BeforePrint-Ereignisses. Dieser Ansatz kann hilfreich sein, wenn du zusätzliche Abfragen beim Drucken einfügen möchtest.

Private Sub Workbook_BeforePrint(Cancel As Boolean)
    If MsgBox("Möchtest du drucken?", vbYesNo + vbQuestion) = vbNo Then
        Cancel = True ' Druckvorgang abbrechen
    End If
End Sub

Praktische Beispiele

  • Beispiel für einen Dateinamen, der den Benutzer und das Datum enthält:

    ActiveWorkbook.SaveAs Filename:="L:\T\All\Daten\Formular\ Test " & Application.Username & " " & Format(Now, "yyyy_mm_dd_hhmm") & ".xlsb"
  • Beispiel für die Verwendung von Environ:

    Dim userName As String
    userName = Environ("Username")

    Dieser Code gibt dir den Windows-Anmeldenamen des Benutzers, den du für den Dateinamen verwenden kannst.


Tipps für Profis

  • Nutze ByVal in deinen Funktionen, um sicherzustellen, dass die Parameter nicht außerhalb der Funktion verändert werden.
  • Verwende Option Explicit am Anfang deines Moduls, um sicherzustellen, dass alle Variablen deklariert sind. Das hilft, Fehler im Code zu vermeiden.
  • Experimentiere mit verschiedenen MsgBox-Optionen, um das Benutzererlebnis zu verbessern.

FAQ: Häufige Fragen

1. Was bedeutet Cancel As Boolean?
Cancel As Boolean ist ein Parameter, der angibt, ob das Schließen der Datei abgebrochen werden soll. Setze ihn auf True, um das Schließen der Datei zu verhindern.

2. Wie kann ich den aktuellen Benutzernamen in Excel abrufen?
Du kannst den aktuellen Benutzernamen mit Application.Username oder Environ("Username") abrufen. Der erste gibt den in den Office-Stammdaten eingetragenen Namen zurück, während der zweite den Windows-Anmeldenamen liefert.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige