Clever-Excel-Forum

Normale Version: Excel mit Makro schliessen – vorher PERSONAL.XLSB speichern.
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Grüezi
 
Ich habe Excel (Microsoft Office Home and Business 2013) so eingerichtet, dass immer auch die PERSONAL.XLSB geöffnet ist und zwar ausgeblendet (Not Visible). Sie ist gespeichert unter
C:\Users\UserName\AppData\Roaming\Microsoft\Excel\XLSTART\
 
In dieser PERSONAL.XLSB gibt es ein Makro, für das ich auf der Symbolleiste für den Schnellzugriff einen Knopf eingerichtet habe. Dieses Makro macht folgendes: Es speichert die aktive Datei und schliesst sie. – Klappt auch bestens.

Code:
Sub Datei_save()
On Error GoTo finis
wc = Windows.Count
wi = Windows(1).Caption     ' Titelleiste des aktiven Fensters!
    If wc = 1 And wi = "PERSONAL.XLSB" Then
        Application.Quit
        Exit Sub
    End If

ActiveWindow.WindowState = xlMaximized
ActiveWindow.Close SaveChanges:=True
Exit Sub

finis:
    ActiveWindow.WindowState = xlMaximized
    ActiveWorkbook.Close
End Sub

Wenn nun alle Dateien gespeichert und geschlossen sind (wenn also wc = 1 and wi ="PERSONAL.XLSB"), ist der Excel-Bildschirm leer. Im Hintergrund ist natürlich (ausgeblendet) die PERSONAL.XLSB geöffnet.
 
Wenn ich nun noch einmal das erwähnte Makro starte, erhalte ich folgende Frage.
"Sollen die Aenderungen der persönlichen Makroarbeitsmappe gespeichert werden? Klicken Sie auf 'Ja', um Ihre Aenderungen zu speichern. ..."
 
Nun mein Anliegen: Wie kann ich das Makro ergänzen, dass diese Frage nicht mehr gestellt wird? Die PERSONAL.XLSB soll durch diese Ergänzung gespeichert werden. Und Excel soll danach geschlossen werden.

Vielen Dank für Eure Tipps und viele Grüsse aus Zürich
Niclaus
Code:
Sub M_snb()
  workbooks(1).save
  activeworkbook.Save
  activeworkbook.close 0
  application.quit
End Sub
Hallo snb
Es klappt mit Deinem Makro - nachdem ich es um zwei Zeilen verkürzt habe.

Code:
Sub M_snb()
  workbooks(1).save
'  activeworkbook.Save
'  activeworkbook.close 0
  application.quit
End Sub

Vielen Dank und freundliche Grüsse
Niclaus
Hallo,

sobald noch ein Addin aktiv ist, wird es nicht mehr zuverlässig funktionieren. Du kannst einfach auf ThisWorkbook referenzieren. Das ist immer das Workbook- Objekt, in dem der Code steht.

Es stellt sich nur die Frage, warum du überhaupt die Personal.xlsb automatisch speichern willst. Mach das doch einfach manuell, wenn du Code anpasst. Ansonsten wirst du doch gefragt, ob du speichern willst
Hallo Hoep

Wie ich oben zu meinem Makro Datei_save() erwähnt habe, wird immer am Ende die Frage gestellt: "Sollen die Aenderungen der persönlichen Makroarbeitsmappe gespeichert werden?" Auch dann, wenn ich in der PERSONAL.XLSB gar nichts geändert habe. Ich vermute, das hängt mit den beiden Variablen wi und wc zusammen, denen jeweils Werte zugewiesen werden.
Es ist reine Bequemlichkeit, warum ich die PERSONAL.XLSB automatisch gespeichert und geschlossen haben möchte. Und für mich ist die Lösung von snb eine "VBA-Wissenserweiterung".
Deinen Hinweis "sobald noch ein Addin aktiv ist..." habe ich notiert und danke Dir dafür.

Viele Grüsse
Niclaus
Hallo Niclaus,

und Du hast nie mal mehr als eine (sichtbare) Datei geöffnet? Ich frage nur wegen des Quit ohne Prüfung.

Gruß Uwe
Hallo Uwe
Doch, ich habe meistens mehrere Dateien geöffnet. Ich muss noch ergänzen: Es gibt ein zweites Makro: Sub Datei_weg(). Das schliesst die aktive Datei ohne speichern.
Ich schliesse also eine nach der andern Datei, je nachdem mit speichern oder ohne speichern. Zwischendurch werden selbstverständlich auch wieder andere Dateien geöffnet.
Ganz am Ende bleibt der leere Bildschirm mit der ausgeblendeten PERSONAL.XLSB, die ich dann mit einem der beiden Makros ebenfalls mit oder ohne speichern schliesse. Excel wird dabei geschlossen.
Grüsse Niclaus

PS: Falls es Dich interessiert: hier die beiden Makros. Sie dienen meinen Bedürfnissen und meiner Bequemlichkeit bestens. Der Fall "OnError GoTo finis" tritt nach meinem Empfinden nie ein. Auch Fehlermeldungen erhalte ich nie.


Code:
Sub Datei_save()  
' Speichert und schliesst die aktive Datei. Am Ende wird PERSONAL gespeichert und geschlossen
On Error GoTo finis
wc = Windows.Count
wi = Windows(1).Caption     ' Gibt jeweils Titelleiste des aktiven Fensters!
If wc = 1 And wi = "PERSONAL.XLSB" Then     ' PERSONAL wird gespeichert
    Workbooks(1).Save     ' Hinweis von snb - clever-excel 21.11.2022
    Application.Quit
    Exit Sub
End If
ActiveWindow.WindowState = xlMaximized
ActiveWindow.Close SaveChanges:=True
Exit Sub
finis:
    ActiveWindow.WindowState = xlMaximized
    ActiveWorkbook.Close
End Sub


Sub Datei_weg()
' Schliesst die aktive Datei ohne Speichern. Am Ende wird PERSONAL ohne speichern geschlossen.
On Error GoTo finis
wc = Windows.Count          ' Gibt einen Long-Wert zurück, der die Anzahl der Objekte in der Auflistung darstellt.
wi = Windows(1).Caption     ' Titelleiste des aktiven Fensters bzw. von PERSONAL.XLSB
If wc = 1 And wi = "PERSONAL.XLSB" Then     ' PERSONAL wird nicht gespeichert
    Workbooks(1).Saved = True
'   Damit gauckelst du Excel vor, die Mappe wäre schon gespeichert. www.herber.de 27.09.2002 / gefunden am 22.11.2022
    Application.Quit
    Exit Sub
End If
ActiveWindow.WindowState = xlMaximized  'kann zu fehlermeldungen führen
ActiveWindow.Close SaveChanges:=False
Exit Sub
finis:
    ActiveWindow.WindowState = xlMaximized  'kann zu fehlermeldungen führen
    ActiveWorkbook.Close
End Sub
Hi,
(22.11.2022, 16:08)Niclaus schrieb: [ -> ]Wie ich oben zu meinem Makro Datei_save() erwähnt habe, wird immer am Ende die Frage gestellt: "Sollen die Aenderungen der persönlichen Makroarbeitsmappe gespeichert werden?" Auch dann, wenn ich in der PERSONAL.XLSB gar nichts geändert habe. Ich vermute, das hängt mit den beiden Variablen wi und wc zusammen, denen jeweils Werte zugewiesen werden.
Nur das Zuweisen von Werten zu Variablen führt noch nicht dazu, dass eine Datei als geändert betrachtet wird. Daher führt dies auch nicht zur Abfrage, ob gespeichert werden soll. Das muss eine andere Ursache haben. Und nach der würde ich suchen und dieses Problem direkt abstellen.

Glaub mir, auch ich arbeite mit einer Personal.xlsb und werde nur gefragt, ob ich speichern will, wenn ich tatsächlich etwas am Code oder der Datei selbst geändert habe.

Wenn du willst, kannst du mal deine Personal.xlsb hier hochladen. Dann kann man sich das mal anschauen und nach der Ursache forschen. Sollte sich eine xlsb-Datei hier nicht hochladen lassen, dann speichere sie einfach als *.xlsm und lade diese hoch.

Merke: Es ist immer besser die Ursache zu beheben als die Symptome zu bekämpfen.
Stehen Formeln in der Personal? Prüfe die Arbeitsblätter und benannten Bereiche. Eine Neuberechnung führt auch dazu, dass die Mappe als ungespeichert gilt. 
Du kannst das Calculate-Ereignis abfangen, dann siehst du, ob sich dawas tut.