Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
676to680
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
676to680
676to680
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

before close msgbox startet 2 mal

before close msgbox startet 2 mal
06.10.2005 10:17:26
roland_k
hi zusammen
habe folgenden code:

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 Cells(5, 10) = "" Then
frage = MsgBox("willst du schliessen?", vbYesNo)
If frage = vbYes Then
If Workbooks.Count = 1 Then
Application.Quit
Else
Cancel = False
Application.DisplayAlerts = False
ThisWorkbook.Close
Exit Sub
End If
End If
End If
End Sub

funktioniert eigentlich ((( aber warum kummt die msgbox 2 mal hintereinander ?
danke im voraus wenn jemand weiss warum das so ist ?
und ev gleich loesung anbieten kann
gruss roland_k

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: before close msgbox startet 2 mal
06.10.2005 10:30:48
Andreas
Die kommt zweimal, weil du im Close Ereignis Thisworkbook.Close verwendendest, damit hast du eigenstlich eine Endlosschleife, da sich das Close Ereignis immer wieder selbst aufruft. Excel würgt diesen Vorgang nach 2 mal automatisch ab.
Mein Vorschlag

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 Cells(5, 10) = "" Then
frage = MsgBox("willst du schliessen?", vbYesNo)
If frage = vbYes Then
Me. Saved = True
Exit Sub
End If
End If
End Sub

Anzeige
AW: before close msgbox startet 2 mal
06.10.2005 12:12:43
roland_k
hi andreas
also ich habe ne excel sitzung:
zwei mappen geeoeffnet:
wenn mappe a aktives fenster soll nur mappe a geschlossen werden nicht beide ?
wenn nur eine mappe offen dann excel schliessen
ich habe symbolleisten ausgeschalten...dru habe nur das schliessen kreuz von exel sichtbar
nicht das vom fenster
der macht aber beide mappen zu
oder leigts ev daran weil mappe b nicht verändert wurde ?
danke gruss roland
AW: before close msgbox startet 2 mal
06.10.2005 13:10:36
Andreas
Hm, also ich hoffe, ich habe das richtig verstanden.
Datei b wird einfach so geschlossen, da Application.DisplayAlerts = False in deinem Code steht wenn du das rausnimmst müßte bei Datei b die Abfrage, ob gespeichert werden soll wieder erscheinen. Das große Kreuz bedeutet grunsätzlich das Schliessen aller Dateien. Eine Alternative ist, wenn sowohl a als auch b folgenden Code erhalten:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
'Folgende Abfrage verhindert, dass eine Arbeitsmappe geschlossen
'wird,  wenn sie nicht aktiv ist
If Thisworkbook.Name <> ActiveWorkbook.Name then
Cancel = True
End if
If Sheets("sp-ti").CommandButton1.Visible = True Then
UserForm4.Show
Cancel = True
Exit Sub
End If
If Cells(5, 10) = "" Then
frage = MsgBox("willst du schliessen?", vbYesNo)
If frage = vbYes Then
Me. Saved = True
Exit Sub
End If
End If
End Sub

Gruß Andreas
Anzeige
noch mal von vorne :-))
06.10.2005 18:41:10
vorne
hi andreas
also:
dein code kann so nicht gehn.....weil zb b nicht in beiden mappen gleiche tabellennamen sind. in b gibts keine sp_ti tabelle
noch mal vom anfang:
ich starte excel einmal!!!
dann oeffne ich mappe arnold.xls
dann oeffne ich mappe berta.xls
also 2 mappen offen
die symbolleisten sind geschlossen ....aslo nur das schliessen kreuz von excel sichtbar.
nun sagen wir:
tenster berta im vordergrund:
wenn ich nun auf das schliessen x (excel schliessen) druecke soll:
berta geschlossen werden(mit den bedingungen siehe anfangstread) ohne speichern allerdings....so dass excel weiter geoeffnet ist und mappe arnold dann sichtbar
fuer den fall das nur mappe berta geoeffnet wurde soll excel schliessen ohen speichern
drum in meinem code abfrage mit count = 1 ...dann application.quit
es soll einfach das fenster berta geschlosssen werden ohne speichern und arnold offen bleiben
danke fuer eure muehe
gruss roland_k
Anzeige
AW: noch mal von vorne :-))
07.10.2005 08:51:47
vorne
Hallo Roland,
ich kanns nicht lassen hier weiter zu machen. Hast du den Code ausprobiert? Was hat denn der Tabellenname damit zu tun? Ich frage doch nur nach dem Arbeitsmappennamen, und der kann nicht gleich sein, da die Datei sonst gar nicht in der selben Excel - Instanz geöffnet werden kann. Also bei mir funktioniert der Code, und der Teil mit sp_ti ist ja für den Ablauf nicht erforderlich und kann weggelassen werden wenn nicht benötigt: Hier nochmal der Code den ich in 2 Arbeitsmappen stehen hatte:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
'Folgende Abfrage verhindert, dass eine Arbeitsmappe geschlossen
'wird,  wenn sie nicht aktiv ist
If Thisworkbook.Name <> ActiveWorkbook.Name then
Cancel = True
End if
Select Case MsgBox("willst du schliessen?", vbYesNo)
case vbYes
Me. Saved = True
Exit Sub
case vbno
cancel = true
end select
End Sub

Die andere Datei kann ja die sache mit dem Commandbutton behalten
Anzeige
ein kreuz ist das mit dem kreuz :((
07.10.2005 10:21:08
roland_k
hallo andreas
danke erst mal
irgendwie reden wir aneienander vorbei.
Me. Saved = true bringt uebrigends bei mir ne fehlermeldung
also nochmal:
folgendes will ich erreichen:
zwei mappen arnold.xls und berta.xls
fangen wir an:
nur arnold geoeffnet:
darin ein comandbutton sichtbar wenn cells(3,3) = ""
die symbolleisten sind aus!!
also nur das schliessen x von excel sichtbar
nun will ich erreichen:
wenn commandbutton sichtbar.......dann soll ueber das x schliessennciht moeglich sein
msgbox "bitte mir commandbutton schliessen"
wenn ich nun commandbutton betätige: soll mappe arnold ohne speichern geschlossen werden
das mit der berta mit deinem code funkt.....sollte diese geoeffnet sein und arnold ist aktives fenster dann wird arnold geschlossen und berta bleibt offen.
erst solte das eben mal mit dem commandbutton schliessen moeglich sein wenn dieser sichtbar ist bzw dann soll eben das schliessen ueber das x nicht moeglich sein
sollte das nun immer noch nicht klar sein
bitte kurz anrufen 07762 9499 ich rufe zurück.....wuesste nciht wie ich das nier noch deutlicher umschreiben soll siehe anfangsthread
ich habe inzwischen was gebastelt (( aber denke mal ziemlich umständlich :-((
danke erst mal
gruss roland_k
Anzeige
AW: ein kreuz ist das mit dem kreuz :((
07.10.2005 11:19:07
Andreas
Hallo Roland
Also der code in Berta ist klar. me.saved sollte nur dann einen Fehler bringen, wenn es nicht im Klassenmodul DieseArbeitsmappe steht, dann kann man Thisworkbook.Saved verwenden. Jetzt verstehe ich langsam die Problematik mit dem Commandbutton. Wie wärs damit:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
if Cells(3,3)="" then
msgbox "Bitte mit Button"
Cancel = true
else
'ob wirdas bei arnold brauchen weiß ich nicht:,
If Thisworkbook.Name <> ActiveWorkbook.Name then
Cancel = True
End if
Select Case MsgBox("willst du schliessen?", vbYesNo)
case vbYes
Me. Saved = True
Exit Sub
case vbno
cancel = true
end select
end if
End Sub

mein Vorschlag wäre dann für den Commandbutton:

Private Sub CommandButton_Click()
Cells (3,3).Value = "irgendwas"
Thisworkbook.Close
End Sub

Dann müßte das BeforeClose Ereignis eigentlich in den ElseBlock gehen und die Frage sollte erscheinen.
noch nicht verzweifelte Grüße Andreas
Anzeige
AW: ein kreuz ist das mit dem kreuz :((
07.10.2005 11:44:03
Andreas
Eine kleine Änderung noch, damit Arnold ohne zu speichern bei Button geschlossen wird:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
if Cells(3,3)="" then
msgbox "Bitte mit Button"
Cancel = true
else
'ob wirdas bei arnold brauchen weiß ich nicht:,
If Thisworkbook.Name <> ActiveWorkbook.Name then
Cancel = True
End if
If Thisworkbook.Saved = False
Select Case MsgBox("willst du schliessen?", vbYesNo)
case vbYes
Me. Saved = True
Exit Sub
case vbno
cancel = true
end select
End if
end if
End Sub

für den Commandbutton:

Private Sub CommandButton_Click()
Cells (3,3).Value = "irgendwas"
Thisworkbook.Saved = True
Thisworkbook.Close
End Sub

Wenn es mit Saved = True schwierigkeiten gibt, muss evt. ein anderer Zwischenspeicher herhalten
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige