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

Before Close

Before Close
10.04.2003 12:52:07
Wolfgang
Hallo,
mit folgendem Code erhalte ich innerhalb meiner Anwendungen das gewünschte Ergebnis:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim w As Object
For Each w In Application.Workbooks
w.Save
Next w
Application.Quit
End Sub

Jetzt muß ich diesen Code aber anpassen, da sich beim schließen von anderen Excel-Mappen auch meine Mappen verabschieden.
Mit welcher Abfrage kann ich das verhindern?
Ich bekomm´s alleine nicht hin.
Danke im voraus.
Gruß
Wolfgang



12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Re: Before Close
10.04.2003 13:04:32
ChrisL

Hallo Wolfgang

If Workbooks.Count = 1 Then
Application.Quit
Else
Workbooks("DeineMappe.xls").Close
End If

Gruss
Chris

Leider noch nicht ganz
10.04.2003 13:25:02
Wolfgang

Hallo Chris,
danke für die prompte Antwort. Meine Anwendung kann aber aus verschiedenen geöffneten Mappen bestehen. Irgendwie muß ich also alle davon betroffenen Mappen abfragen können.
Konkret dürfen also bei einer 'fremden' Anwendung meine Mappen nicht geschlossen werden. Dagegen müssen alle Mappen der eigenen Anwendung geschlossen werden wenn ich die aufrufende Mappe schließe.
Hoffe ist verständlich.
Gruß
Wolfgang

Anzeige
Re: Leider noch nicht ganz
10.04.2003 13:58:50
ChrisL

Hallo Wolfgang

Woher weiss denn die Anwendung, ob die Mappe zur Anwendung gehört oder nicht?

Sind es immer die gleichen Mappen? Und sind immer alle dieser zur Anwendung gehörenden Mappen offen oder manchmal auch nur einige davon?

Gruss
Chris

Re: Leider noch nicht ganz
10.04.2003 14:20:01
Wolfgang

Hallo Chris,
die Anwendung besteht aus 6 Mappen. Ich kann nur über eine Startmappe die erste davon aufrufen. In dieser Startmappe steht auch die Before_Close_Bedingung.
Von der ersten Mappe kann ich dann auf die anderen Mappen verzweigen. Maximal könnten (theoritisch) also alle 6 Mappen geöffnet sein. Aber auch weniger in unterschiedlichen Konstellationen.
Mein Wunsch wäre, dass nur wenn ich die Startmappe schließe auch die anderen zur Anwendung gehörenden Mappen geschlossen werden.
Sollte also jemand auf das "x" für schließen klicken, können alle fremden Mappen geschlossen werden nur eben nicht meine.
Geht das über Abfragen zu lösen?
Gruß
Wolfgang

Anzeige
Re: Leider noch nicht ganz
10.04.2003 15:13:25
ChrisL

Hallo Wolfgang

Versuch mal so...

Option Explicit

Private Sub CommandButton1_Click()
Dim i As Integer

For i = Workbooks.Count To 1 Step -1
If Workbooks(i).Name = "test1.xls" Then Workbooks("test1.xls").Close
If Workbooks(i).Name = "test2.xls" Then Workbooks("test2.xls").Close
If Workbooks(i).Name = "test3.xls" Then Workbooks("test3.xls").Close
If Workbooks(i).Name = "test4.xls" Then Workbooks("test4.xls").Close
If Workbooks(i).Name = "test5.xls" Then Workbooks("test5.xls").Close
If Workbooks(i).Name = "test6.xls" Then Workbooks("test6.xls").Close
Next i

If Workbooks.Count = 1 Then
Application.Quit
Else
Workbooks("Anwendung.xls").Close
End If
End Sub

Gruss
Chris


Anzeige
So auch nicht
10.04.2003 15:55:48
Wolfgang

Hallo Chris,
leider ist das auch der falsche Weg. Es wird wieder alles geschlossen was offen ist wenn i.Name zutrifft.
Ich hoffe nur nicht, dass Du Dir die ganze Arbeit machst und ein Kommunikationsproblem vorliegt!
Unter Anwendung verstehe ich insgesamt folgende 6 Mappen.
1.Startmappe.xls
2.Test1.xls
3.Test2.xls
4.Test3.xls
5.Test4.xls
6.Test5.xls

Mir geht es ausschließlich um folgende Prozeduren die ich in der Startmappe unter Workbook_BeforeClose abfgangen will:

1. Schließen mit "x" bei der Startmappe würden alle geöffneten Mappen von 2. bis 6. schließen.
2. Schließen mit "x" bei den Mappen 2. bis 6. schließt nur die einzelne Mappe.
3. Schließen mit "x" bei fremden Mappen soll nur bei diesen wirksam werden, aber nicht bei meinen Mappen von 1. bis 6.
Bitte teile mir bevor Du weiteren Gehirnschmalz investierst mit ob das so wirklich verständlich ist!?
Danke
Gruß
Wolfgang


Anzeige
Re: So auch nicht
10.04.2003 16:11:47
ChrisL

Hallo Wolfgang

Ein bischen Kommunikationsschwierigkeiten scheinen wir ja schon zu haben, doch will mal nicht behaupten, dass es zwingend an dir liegt.

Also Punkt 2 und 3 ist ja der Normalfall, da braucht es kein Makro.

Wenn du die Startmappe mit "x" schliesst, dann schliesst du mit folgender Prozedur alle Mappen 2-6.

For i = Workbooks.Count To 1 Step -1
If Workbooks(i).Name = "test1.xls" Then Workbooks("test1.xls").Close
If Workbooks(i).Name = "test2.xls" Then Workbooks("test2.xls").Close
If Workbooks(i).Name = "test3.xls" Then Workbooks("test3.xls").Close
If Workbooks(i).Name = "test4.xls" Then Workbooks("test4.xls").Close
If Workbooks(i).Name = "test5.xls" Then Workbooks("test5.xls").Close
Next i

Da du ja in der Startmappe auf "x" gedrückt hast, schliesst sich diese folglich auch. Mit
Cancel = True
am Ende des Makros kannst du dies zwar unterdrücken, doch lässt sich die Mappe dadurch überhaupt nicht mehr schliessen, was ja auch nicht Sinn und Zweck sein kann. Wie willst du die Startmappe schliessen, wenn nicht mit "x" (bzw. "Menu schliessen", was faktisch das selbe ist).

Nachfolgender Code am Ende des Makros bewirkt, dass sich, sofern noch fremde Dateien offen sind, nicht die ganze Applikation schliesst, sondern eben nur die Startmappe. Alle anderen Dateien wurden ja vorher schon geschlossen.

If Workbooks.Count = 1 Then
Application.Quit
Else
Workbooks("Anwendung.xls").Close
End If

Gruss
Chris

Anzeige
Re: So auch nicht
10.04.2003 16:42:16
Wolfgang

Hallo Chris,
wirklich super, dass Du Dich so reinhängst.
Deinen Code verstehe ich jetzt. Was ich aber nicht verstehe - und darin liegt vielleicht das Mißverständnis: Du sagst Punkte 2 und 3 sind außen vor. Dem kann aber nicht so sein. Nehmen wir an außer meinen Mappen habe ich noch irgendwelche anderen Mappen geöffnet. Wenn ich jetzt schließen durch "x" sage werden automatisch alle in der Menueleiste vorhanden Dateien geschlossen. Ich kenne das von Excel garnicht anders.
Aber genau das will ich ja vermeiden, meine Anwendung darf nie automatisch geschlossen werden, sondern nur wenn ich die Startmappe schließe.
Eine Nachfrage noch zu Deinem Code:
Workbooks("Anwendung.xls").Close
Steht hier Anwendung für ("Startmappe.xls")
Danke
Gruß
Wolfgang

Anzeige
Re: So auch nicht
10.04.2003 17:00:21
ChrisL

Hallo Wolfgang

Letzteres ist richtig... "Anwendung" = "Startmappe"

Zum anderen, verstehe ich jetzt was du meinst... nach dem Motto vor lauter X das X nicht gesehen.

Wenn jemand das "X" der Applikation und nicht das "X" der Mappe drückt, sagt er ja damit, dass er Excel ganz samt allem drum und dran schliessen will, sonst würde er doch das "X" der Mappe drücken. Das selbe Problem besteht aber auch, wenn er über Menu beenden beendet.

Aber ich muss jetzt so ne Stunde weg... ich komm nochmals

Gruss
Chris

Bis später
10.04.2003 17:22:54
Wolfgang

Hallo Chris,
genau das habe ich gemeint!
Vielleicht hast Du ja eine Idee?
Gruß
Wolfgang

Anzeige
Re: Bis später
10.04.2003 18:16:04
ChrisL

Hallo Wolfgang

Also da bin ich wieder. Allerdings die tolle Idee hatte ich trotzdem nicht. Denke die Startmappe ist nun OK. Zu den anderen würde ich das Schliessen über "X" generell verbieten und stattdessen einen Button einbauen:

'Zum Workbook
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If SchliessenOK = False Then Cancel = True
End Sub

Private Sub Workbook_Open()
SchliessenOK = False
End Sub

'Zum CommandButton in der Tabelle
Private Sub CommandButton1_Click()
SchliessenOK = True
ThisWorkbook.Close
End Sub

'Deklaration in Modul
Public SchliessenOK As Boolean

Alternativ kannst du auch alle Menu ausblenden und die Tabelle auf Vollbild setzen. Dann besteht aber immernoch das Problem mit Alt + F4, was sich allerdings mit zusätzlichem Aufwand auch abfangen liesse.

Gruss
Chris

Anzeige
Danke Chris
10.04.2003 18:26:45
Wolfgang

Hallo Chris,
bist echt ein Supertyp der sich wie versprochen wieder gemeldet hat.
Werde das jetzt so machen und den Rest spare ich mir für ein späteres Leben auf.
Nochmals vielen Dank für die ausführlichen Anleitungen und der damit verbundenen Arbeit.
Gruß
Wolfgang

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige