Registriert seit: 26.01.2018
Version(en): 2010
27.01.2018, 01:36
(Dieser Beitrag wurde zuletzt bearbeitet: 27.01.2018, 01:36 von CaptainNemo.)
Hallo, ich bin dabei für unser Internat ein paar Dateien zu erstellen, die z.B. die Dokumentationsarbeit erleichtern sollen. Da außerdem, was die Computerei betrifft, zum Teil sehr ungeübte Pädagogen am Werk sind und ich auf den Geschmack gekommen bin, möchte ich so viele Schritte wie möglich automatisieren. In diesem Fall soll beim ersten Speichervorgang der Excel-Vorlage Dateiname und -typ vorgegeben werden. Das funktioniert auch im Prinzip mit den unten gezeigten Codes. - Problem 1: Es sollen nur die Zellen aus Tabellenblatt 1 ausgelesen werden, auch wenn der User zum Zeitpunkt des Speicherns ein anderes Blatt geöffnet hat. Ich hätte gedacht, das kriege ich noch hin...
Betrifft nur den 2. Code: Geht man auf Schließen, öffnet sich meine vbYesNoCancel-Box. - Problem 2: Klickt man dann auf Abbrechen, öffnet sich trotzdem noch die Excel-Standard-Box ("Soll gespeichert werden?").
- Problem 3: Klickt man auf Ja, öffnet sich wie gewünscht die Speichern unter-Dialogbox. Klickt man in dieser auf Speichern, schließt sich diese, aber nicht die Datei!
- Problem 4 (die Vorlagen-Datei wurde bereits als xlsm gespeichert): Klickt man auf Ja, soll gespeichert und die Datei geschlossen werden. Stattdessen öffnet sich das Speichern unter-Fenster.
Mit viel Recherchiererei, ein bisschen eigene Erfahrung und Hilfe bin ich bis hierhin gekommen: Code: Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) If Me.Path = "" Then On Error Resume Next Application.EnableEvents = False Cancel = True Application.Dialogs(xlDialogSaveAs).Show "Tagesdokumentation " & [B1] & " " & [A1], 52 Application.EnableEvents = True On Error GoTo 0 End If End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) If Me.Saved = False Then On Error GoTo Fehler Select Case MsgBox("Änderungen in " & ThisWorkbook.Name & " speichern?", vbYesNoCancel, ThisWorkbook.Name) Case vbYes Application.EnableEvents = False Application.Dialogs(xlDialogSaveAs).Show "Tagesdokumentation " & [B1] & " " & [A1], 52 Cancel = True Case vbNo ThisWorkbook.Saved = True Application.Quit End Select Fehler: Application.EnableEvents = True End If End Sub
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
Hallo Uwe, vielleicht so: Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) If Me.Path = "" Then On Error Resume Next Application.EnableEvents = False Cancel = True Application.Dialogs(xlDialogSaveAs).Show _ "Tagesdokumentation " & Me.Worksheets("keine Ahnung").Range("B1").Value & " " & _ Me.Worksheets("keine Ahnung").Range("A1").Value, 52 Application.EnableEvents = True On Error GoTo 0 End If End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) If Me.Saved = False Then Cancel = True Me.Saved = True Select Case MsgBox("Änderungen in " & ThisWorkbook.Name & " speichern?", vbYesNoCancel, ThisWorkbook.Name) Case vbYes, vbOK If Len(Me.Path) Then Me.Save Else Application.Dialogs(xlDialogSaveAs).Show _ "Tagesdokumentation " & Me.Worksheets("keine Ahnung").Range("B1").Value & " " & _ Me.Worksheets("keine Ahnung").Range("A1").Value, 52 End If End Select Application.Quit End If End Sub Gruß Uwe
Registriert seit: 26.01.2018
Version(en): 2010
27.01.2018, 16:06
(Dieser Beitrag wurde zuletzt bearbeitet: 27.01.2018, 16:06 von CaptainNemo.)
Ich dachte schon ich grüß mich selber.
Leider verlagern sich die Probleme nur.
(Betrifft nur den zweiten Code.)
Ich klicke auf Schließen. Die vbYesNoCancel-Box öffnet sich.
Die Excel-Vorlage ist noch nicht gespeichert worden: Klicke ich auf Ja speichert Excel die Datei sogar mit den Veränderungen als Excel-Vorlage unter demselben Namen (und schließt dann nicht). Klicke ich auf Nein, schließt die Datei nicht, was sie bisher getan hat.
Datei ist bereits als xlsm gespeichert worden: Klicke ich auf Ja, schließt die Datei nicht. Ebenso, wenn ich auf Nein klicke. Aber wenigstens öffnet sich wenn ich auf Abbrechen klicke diesmal nicht zusätzlich noch die Frage-Box von Excel. :19:
Nochmal zur Verdeutlichung:
Es geht um die Prozeduren, die durch das Klicken auf Ja - Nein - Abbrechen der vbYesNoCancel-Box ausgelöst werden, die auftaucht, wenn die Datei verändert wurde und ich auf Schließen klicke. Und zwar Fall 1: Wenn die xltm noch nicht gespeichert wurde und noch eine xltm ist. Fall 2: Wenn sie bereits gespeichert wurde und somit eine xlsm ist.
Also eigentlich das ganz normale Speicherjedöns, nur halt mit vorgegebenem bzw. vorgeschlagenem Dateinamen im Speichern unter-Fenster beim ersten Speichervorgang.
Hätte ich geahnt was das für ein Aufwand ist... Ich hatte vermutet, dass es eine Möglichkeit gibt, Excel einfach zu sagen - bist du noch eine xltm und taucht dann das Speichern unter-Fenster auf, dann nimm meinen Dateinamen! Den Rest machste wie immer (was dann keiner Anweisung bedarf)!
Wie auch immer! Trotz allem hätte ich gedacht, dass die verbliebenen Probleme nicht so schwer aus der Welt zu schaffen sind.
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
Hallo Uwe, teste es noch mal so: Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) If Me.Path = "" Then On Error Resume Next Application.EnableEvents = False Cancel = True Application.Dialogs(xlDialogSaveAs).Show _ "Tagesdokumentation " & Me.Worksheets("keine Ahnung").Range("B1").Value & " " & _ Me.Worksheets("keine Ahnung").Range("A1").Value, 52 Application.EnableEvents = True On Error GoTo 0 End If End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim bolWeiter As Boolean If Me.Saved = False Then Select Case MsgBox("Änderungen in " & Me.Name & " speichern?", vbYesNoCancel + vbQuestion, Me.Name) Case vbYes On Error Resume Next Application.EnableEvents = False If Len(Me.Path) Then Me.Save Else Do bolWeiter = Application.Dialogs(xlDialogSaveAs).Show( _ "Tagesdokumentation " & Me.Worksheets("keine Ahnung").Range("B1").Value & " " & _ Me.Worksheets("keine Ahnung").Range("A1").Value, 52) If Not bolWeiter Then bolWeiter = MsgBox("Die Speicherung wurde abgebrochen. Trotzdem beenden?", vbYesNo + vbQuestion) = vbYes End If Loop Until bolWeiter Me.Saved = True End If Application.EnableEvents = True On Error GoTo 0 Application.Quit Case vbNo Me.Saved = True Application.Quit Case Else Cancel = True End Select End If End Sub Gruß Uwe
Registriert seit: 26.01.2018
Version(en): 2010
Hallo Uwe, vielen Dank für deine Bemühungen, aber beim Test scheiterte es direkt am Anfang. Mein neuster Stand: Code: Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) If Me.Path = "" Then On Error Resume Next Application.EnableEvents = False Cancel = True Application.Dialogs(xlDialogSaveAs).Show "Tagesdokumentation " & Worksheets("Übergabe").Range("B1").Value & " " & Worksheets("Übergabe").Range("A1").Value, 52 Application.EnableEvents = True On Error GoTo 0 End If End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) Application.EnableAutoComplete = True If Me.Saved = False Then On Error GoTo Fehler Select Case MsgBox("Änderungen in " & "'" & ThisWorkbook.Name & "'" & " speichern?", vbYesNoCancel, ThisWorkbook.Name) Case vbYes Application.EnableEvents = False Application.Dialogs(xlDialogSaveAs).Show "Tagesdokumentation " & Worksheets("Übergabe").Range("B1").Value & " " & Worksheets("Übergabe").Range("A1").Value, 52 Application.Quit Case vbNo ThisWorkbook.Saved = True Application.Quit Case vbCancel Cancel = True End Select Fehler: Application.EnableEvents = True End If End Sub
Ärgerlich ist, dass, wenn man in der noch ungespeicherten xltm-Datei (von mir erstellt) auf Schließen und dann im Speichern-unter-Fenster auf Abbrechen geht, dann trotzdem noch das Excel-Standard-Fenster (Speichern - Nicht Speichern - Abbrechen) auftaucht. Wenn es bereits eine xlsm ist und man auf Schließen und dann auf Speichern geht, sollte die Datei gespeichert und dann geschlossen werden. Stattdessen popt das Speichern unter-Fenster auf.
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
Hallo Uwe, ich weiß nicht, was und wie Du getestet hast, weil Dein "aktueller" Stand ja nichts mit meinem letzten (getesteten) Code zu tun hat, aber bei mir funktioniert das in meinen Augen perfekt. Gruß Uwe
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallöchen, habe mir jetzt nur den vorletzten Beitrag angeschaut. Zitat:Ärgerlich ist, dass, wenn man in der noch ungespeicherten xltm-Datei (von mir erstellt) auf Schließen und dann im Speichern-unter-Fenster auf Abbrechen geht, dann trotzdem noch das Excel-Standard-Fenster (Speichern - Nicht Speichern - Abbrechen) auftaucht. Eventuell bekommst Du das weg, wenn Du im BeforeSave und / oder BeforeClose noch die Zeile ThisWorkbook.Saved = True unterbringst. Eventuell müsste man noch den Dateityp berücksichtigen. Code: Wenn es bereits eine xlsm ist und man auf Schließen und dann auf Speichern geht, sollte die Datei gespeichert und dann geschlossen werden. Stattdessen poppt das Speichern unter-Fenster auf.
Da kommt also nach dem Speichern zusätzlich noch Speichern Unter?
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
(02.02.2018, 13:23)schauan schrieb: habe mir jetzt nur den vorletzten Beitrag angeschaut. was soll das denn!? Gruß Uwe
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallöchen, jetzt habe ich mir auch noch den Code aus dem genannten Beitrag angeschaut Das Speichern Unter Fenster geht beim Schließen auf, weil Du es so programmiert hast. Wenn Du nicht willst, das es aufgeht, dann musst Du stattdessen einfach nur ThisWorkbook.Save programmieren. Wenn Du da noch Bedingungen ran knüpfst, z.B. den Dateityp, musst Du diese entsprechend programmieren. Einen Beispielcode hättest Du ja im BeforeSave. If Me.Path = "" Then wäre nur eine etwas unsinnige Bedingung im BeforeClose - wenn die Datei noch nie gespeichert wurde, wäre sie hinterher ja nicht existent
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
Hallo André, hast Du meinen Vorschlag in #4 mal getestet? Das wäre vielleicht hilfreicher. Gruß Uwe
|