Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
816to820
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
816to820
816to820
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

before Close - Modulaufruf

before Close - Modulaufruf
07.11.2006 07:53:12
roland_k
guten morgen zusammen
ob ich das jeh kapiere ?
also ich habe in ner mappe ein tabelle: Sheets("sp-ti")
und einen commandbutton1, welcher nach bedingungen sichtbar oder unsichtbar ist.
genau dann(wennunsichtbar), soll verhindert werden dass die mappe gespeichert wird.
dazu habe ich dann mal was gebastelt:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.DisplayAlerts = False
If Sheets("sp-ti").CommandButton1.Visible = True Then
UserForm4.Show
Cancel = True
Exit Sub
End If
If Sheets("sp-ti").CommandButton1.Visible = False Then
frage = MsgBox("willst du schliessen?", vbYesNo)
If frage = vbYes Then
Application.Quit
Else
Cancel = True
Exit Sub
End If
End If
End Sub

genial: das ding funktioniert. die mappe schliesst fragt nicht nach und speichert nicht.
so nun wollte ich das mit einem Modul machen:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
schliessen_ohne_speichern.schliessen
End Sub

Sub schliessen()
Application.DisplayAlerts = False
If Sheets("sp-ti").CommandButton1.Visible = True Then
UserForm4.Show
Cancel = True
Exit Sub
End If
If Sheets("sp-ti").CommandButton1.Visible = False Then
frage = MsgBox("willst du schliessen?", vbYesNo)
If frage = vbYes Then
Application.Quit
Else
Cancel = True
Exit Sub
End If
End If
End Sub
nun kommt aber wieder der dialog Speichern -Ja- Nein- Abbrechen
diesen habe ich aber mit Application.DisplayAlerts = False verhindert ?
was habe ich da mal wieder nicht kapiert?
danke wenn mir da jemand Rat weiss
grüsse
roland_k

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: before Close - Modulaufruf
07.11.2006 08:13:23
fcs
Hallo Roland,
Füge vor Application.Quit
eine Zeile ein, die die Datei ohne speichern schließt
ThisWorkbook.Close savechanges:=False
Die Anweisung DisplayAlert = False kannst du dann weglassen.
Falls du die Anwendung ohne Rückfragen schließt, dann besteht ja auch noch die Gefahr, dass ggf. parallel geöffnete Dateien auch ohne Speichern geschlossen werden. Keine besonders gute Lösung.
Gruss
Franz
das ist nicht das Problem:
07.11.2006 09:36:47
roland_k
hallo franz,
der tip ist grundlegend gut, aber hier ist ein anderes Problem:
der code funtioniert wie beschrieben aber nicht wenn ich das mit einem Modul mache.
frage eben warum das nicht geht. (siehe fragestellung:)
wenn ich das mit dem modul mache kommt eben wieder die meldung von excel ....(speichern)
habe ich den code im before close ereigniss stehn dann funkts das.
wenn ich das so mache wie du das angebgeben hast kommt folgendes.####################
die msgbox erscheint zweimal....hmmm#################################################
die mappe wird geschlossen aber nicht excel......####################################
zur erläuterung:
ich oeffne meine mappe und schalte per makro die symbolleisten aus.
nun kann man eingaben machen...........wenn alle bedingungen erfüllt sind wird der commandbutton1 sichtbar. das schliessen über das kreuz ist nicht möglich, nur mit betätigen des commandbutton1
wenn der anwender aber eingabben macht und aus irgendwelchen gründen beenden will so soll
excel geschlossen werden wenn er bei der msgbox mit ja bestätigt.
dann wird die mappe ohne speichern geschlossen und excel beendet.
keine ahnung was da passiert
ich will einfach excel beenden ohne dass die active mappe gespeichert wird
es ist aber nur das kreuz von excel sichtbar........nicht das kreuz der mappe, weil die symbolleisten ausgeschaltet sind.
gruss roland_k
Anzeige
AW: das ist nicht das Problem:
07.11.2006 11:35:36
fcs
Hallo Roland,
ich hab noch ein wenig probiert. Das Problem ist scheinbar, dass bei der Verlagerung in eine andere Prozedur der Wert von "Cancel" nicht korrekt an die BeforeClose-Prozedur zurückgegeben wird und dadurch weiterhin Sicherheitsabfragen erfolgen.
Ich konnte jetzt nicht alles Testen (wg.Buttons und Userform etc.) aber folgende Variante mit einer Hilfsvariablen sollte funtkionieren. Aber dann stellt sich die Frage ob eine in ein Modul ausgelagerte Prozedur noch Sinn macht.
Gruß
Franz

Private Sub Workbook_BeforeClose(Cancel As Boolean)
schliessen_ohne_speichern.schliessen
Cancel = NichtBeenden
End Sub
Im Modul:
Public NichtBeenden As Boolean
Sub schliessen()
Application.DisplayAlerts = False
If Sheets("sp-ti").CommandButton1.Visible = True Then
UserForm4.Show
NichtBeenden = True
Cancel = True 'evtl nicht mehr erforderlich
Exit Sub
End If
If Sheets("sp-ti").CommandButton1.Visible = False Then
frage = MsgBox("willst du schliessen?", vbYesNo)
If frage = vbYes Then
NichtBeenden = False
Application.Quit
Else
Cancel = True 'evtl nicht mehr erforderlich
NichtBeenden = True
Exit Sub
End If
End If
End Sub


Anzeige
AW: das ist nicht das Problem:
07.11.2006 13:19:01
roland_k
danke franz,
wollte das modul eben so speichern ...und wieder einsetzen,
abe einfach den code gespeichert ....funkts ja auch
aber wenn ich das mit workbook.close voranstelle dann schliesst excel nicht
ichmuss dann das kreuz nochmal betätigen
danke für die erläuterungen....war sehr hilfreich...
gruss roland_k
AW: das ist nicht das Problem:
07.11.2006 14:39:36
fcs
Hallo Roland,
aber wenn ich das mit workbook.close voranstelle dann schliesst excel nicht

Da hatte ich nicht weit genug gedacht. :(
Mit dem Schließen des Workbooks wird natürlich auch der Code nicht mehr weiter ausgeführt.
Probieren geht halt immer noch über studieren :D
Gruß
Franz
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige