Anzeige
Archiv - Navigation
1224to1228
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Datei komfortabel schliessen

Datei komfortabel schliessen
Frank
Hallo Leute,
ich soll auf der Arbeit eine Excel-Datei kreiren - für Anfänger.
Zum Schluss würde ich gerne ich beim beenden (Datei schließen, Excel beenden, "x" oben rechts) den Anfängern mehrere Auswahlmöglichkeiten geben:
Änderungen speichern und Datei schließen
Änderungen speichern (und Kopie anlegen) und Datei schliessen
Änderungen verwerfen und Datei schließen
Änderungen verwerfen und in der Datei weiter arbeiten
Die Hinweise, die Excel sonst auspuckt, sollen unterbleiben. Bei Punkt 2 müsste ich dann noch einen COde zum kopieren einfügen. Den habe ich gefunden.
Wer hat sowas schon einmal gemacht oder kann mir helfen? Bin in VBA selbst Anfänger, die Online-Suche hat mich aufgrund vielen Einträge ins Nirwana geführt.
Sollte jemand was besseres haben bzw. ich einen Denkfehler, bitte gerne Bescheid sagen.
Gruß
Frank
AW: Datei komfortabel schliessen
18.08.2011 14:05:05
marcl
Hallo Frank,
such mal nach Workbook before close
cancel as boolean ist dann für das X.
Ich würde Dir eine Userform empfehlern, die sich immer öffnet. Da könnte man 4 Schaltflächen einbauen.
1. ActiveWorkbook.Close savechanges:=True
2. Activeworkbook Save As Filename:=ActiveWorkbook.Path & "Kopie von " & Activeworkbook.Name
3. ActiveWorkbook.Close savechanges:=False
4. Exit Sub
Gruß
marcl
AW: Datei komfortabel schliessen
18.08.2011 14:20:58
Frank
Hallo Marcl,
vielen Dank für die gutgemeinten Ratschläge. Das was Du aber schreibst, übersteigt eindeutig mein VBA-Wissen. Leider bin ich absoluter Anfänger in VBA!
Ich habe auch mal nach dem Befehl gesucht, bin aber nicht fündig geworden (also ich habe nix gefunden, was ich jetzt verwerten könnte).
Daher noch einmal offen in der Hoffnung, dass man mir eine Beispieldatei zur Verfügung stellt. Ich wüßte jetzt beispielsweise auch nicht, wie man ein Userform zum Leben erwecken kann.
Gruß
Frank
Anzeige
AW: Datei komfortabel schliessen
18.08.2011 14:17:51
fcs
Hallo Frank,
hier eine Lösung mit Inputbox.
Gruß
Franz
'Code unter DieseArbeitsmappe
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'Aktionen vor dem schliessen der Datei
Dim sMsgTxt As String, vOption, vFileName, sCopyName As String
sCopyName = Left(Me.Name, InStrRev(Me.Name, ".") - 1) & " Copy" _
& Format(Now, "YYYYMMDD_hhmmss")
If Me.Saved = False Then
sMsgTxt = "Was möchten Sie jetzt machen?" & vbLf _
& "1 = Änderungen speichern und Datei schließen" & vbLf _
& "2 = Änderungen speichern (und Kopie anlegen) und Datei schliessen" & vbLf _
& "3 = Änderungen verwerfen und Datei schließen" & vbLf _
& "4 = in der Datei weiter arbeiten"
Input_box:
vOption = InputBox(Prompt:=sMsgTxt, Title:="Datei Schliessen", Default:=1)
Select Case vOption
Case "1"
Me.Save
Case "2"
Me.Save
vFileName = Application.GetSaveAsFilename(InitialFileName:=sCopyName, _
Title:="Bitte Name der Kopie eingeben/auswählen")
If vFileName  False Then
Me.SaveCopyAs Filename:=vFileName
End If
Case "3"
Me.Saved = True
Case "4", "" '  "" = Abbrechen wurde gewählt
Cancel = True
Case Else
GoTo Input_box
End Select
ElseIf Me.Saved = True Then
sMsgTxt = "Was möchten Sie jetzt machen?" & vbLf _
& "1 = Datei schließen" & vbLf _
& "2 = Kopie anlegen und Datei schliessen" & vbLf _
& "3 = in der Datei weiter arbeiten"
Input_box2:
vOption = InputBox(Prompt:=sMsgTxt, Title:="Datei Schliessen", Default:=1)
Select Case vOption
Case "1"
Case "2"
vFileName = Application.GetSaveAsFilename(InitialFileName:=sCopyName, _
Title:="Bitte Name der Kopie eingeben/auswählen")
If vFileName  False Then
Me.SaveCopyAs Filename:=vFileName
End If
Case "3", "" '  "" = Abbrechen wurde gewählt
Cancel = True
Case Else
GoTo Input_box2
End Select
End If
End Sub

Anzeige
AW: Datei komfortabel schliessen
18.08.2011 14:33:50
Frank
Hallo Franz,
super, das ist echt klasse.
Eine Hilfe brauche ich noch. Wie müsste ich den COde ändern, wenn ich die Sicherheitkopie direkt unter folgendem Pfad speichern möchte.
ActiveWorkbook.SaveCopyAs Filename:="C:\Dokumente und Einstellungen\Franz\Eigene Dateien\Kopie von Testdatei 2011.xls"
Danke!
Gruß
Frank
AW: Datei komfortabel schliessen
18.08.2011 21:03:57
Frank
Hallo zusammen,
habe es m.E. fast geschafft.

Private Sub Workbook_BeforeClose(Cancel As Boolean)
'Aktionen vor dem schliessen der Datei
Dim sMsgTxt As String, vOption, vFileName, sCopyName As String
sMsgTxt = "Was möchten Sie jetzt machen?" & vbLf & vbLf _
& "1 = Änderungen speichern und Datei schliesen" & vbLf & vbLf _
& "2 = Änderungen speichern und Datei schliessen (Kopie für Mitarbeiter anlegen)" & vbLf  _
& vbLf _
& "3 = Änderungen verwerfen und Datei schliessen" & vbLf & vbLf _
& "4 = in der Datei weiter arbeiten"
Input_box2:
vOption = InputBox(Prompt:=sMsgTxt, Title:="Datei Schliessen", Default:=1)
Select Case vOption
Case "1"
ActiveWorkbook.Save
Case "2"
ActiveWorkbook.Save
Application.ScreenUpdating = False
Sheets("Kalender").Copy
ActiveWorkbook.SaveCopyAs Filename:="C:\Dokumente und Einstellungen\Frank\Eigene Dateien\ _
Kopie von Testdatei 2011.xls"
ActiveWorkbook.Close savechanges:=False
Case "3"
Application.DisplayAlerts = False
ActiveWorkbook.Close
Case "4", "" '  "" = Abbrechen wurde gewählt
Cancel = True
Case Else
GoTo Input_box2
End Select
Application.ScreenUpdating = False
' End If
End Sub

Allerdings wird bei Auswahl 3 die Inputbox nochmals aufgerufen. Ich möchte nach Auswahl 3, dass die Datei ohne Speichern geschlossen wird.
Was mache ich falsch?
Gruß
Frank
Anzeige
AW: Datei komfortabel schliessen
18.08.2011 22:57:19
fcs
Hallo Frank,
wenn dieses Makro gestartet wird, dann ist Excel bereits im Prozess diese Datei zu schliessen.
Wenn du innerhalb dieser Prozedur nochmals die Anweisung zum Schliessen gibst, dann wird dieses Makro nochmals aufgerufen.
Damit Excel die Datei schließt, ohne die Sicherheitsabfrage einzublenden, muss man den gespeichert-Staus der Datei auf True setzen.
Außerdem ist zu empfehlen in dieser Prozedur mit den Objekt-Variablen Me oder Thisworkbook zu arbeiten, wenn die Arbeitsmappe gemeint ist in der das Makro steht, und nicht mit Activeworkbook.
Gruß
Franz
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'Aktionen vor dem Schliessen der Datei
Dim sMsgTxt As String, vOption, vFileName, sCopyName As String
sMsgTxt = "Was möchten Sie jetzt machen?" & vbLf & vbLf _
& "1 = Änderungen speichern und Datei schliesen" & vbLf & vbLf _
& "2 = Änderungen speichern und Datei schliessen (Kopie für Mitarbeiter anlegen)" _
& vbLf & vbLf _
& "3 = Änderungen verwerfen und Datei schliessen" & vbLf & vbLf _
& "4 = in der Datei weiter arbeiten"
Input_box2:
vOption = InputBox(Prompt:=sMsgTxt, Title:="Datei Schliessen", Default:=1)
Select Case vOption
Case "1"
ThisWorkbook.Save
Case "2"
ThisWorkbook.Save
Application.ScreenUpdating = False
Sheets("Kalender").Copy
sCopyName = "C:\Dokumente und Einstellungen\Frank\Eigene Dateien\" _
& "Kopie von Testdatei 2011.xls"
ActiveWorkbook.SaveCopyAs Filename:=sCopyName
ActiveWorkbook.Close savechanges:=False
Application.ScreenUpdating = True
Case "3"
ThisWorkbook.Saved = True 'verhindert das Sicherheitsmeldung von _
Excel angezeigt wird
Case "4", "" '  "" = Abbrechen wurde gewählt
Cancel = True
Case Else
GoTo Input_box2
End Select
' End If
End Sub

Anzeige
Funktioniert nun bestens....
19.08.2011 12:52:29
Frank
Hast Du sowas auch schon einmal mit einer Userform gemacht?
AW: Userform beim Schliessen einer Datei anzeigen
19.08.2011 21:26:21
fcs
Hallo Frank,
hier eine Beispieldatei mit Userform inklusive einiger Spielereien mit den Farben der Optionsschaltflächen.
https://www.herber.de/bbs/user/76268.xls
Weitere Erläuterungen findest du in der Datei.
Gruß
Franz
AW: Userform beim Schliessen einer Datei anzeigen
19.08.2011 22:25:56
Frank
Hallo Franz,
das ist natürlich der Hammer und wie für mich gemacht.
Echt, super. Danke für Deine Hilfe!
Schönes WE
Frank

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige