Excel-Vorlage für Internatsdoku beim ersten Speichern Dateiname vorgeben
#1
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
Top
#2
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
Top
#3
Wink 
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.
Top
#4
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
Top
#5
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.
Top
#6
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.  Undecided

Gruß Uwe
Top
#7
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)
Top
#8
(02.02.2018, 13:23)schauan schrieb: habe mir jetzt nur den vorletzten Beitrag angeschaut.

was soll das denn!?  Undecided

Gruß Uwe
Top
#9
Hallöchen,

jetzt habe ich mir auch noch den Code aus dem genannten Beitrag angeschaut Smile

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 Smile
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#10
Hallo André,

hast Du meinen Vorschlag in #4 mal getestet? Das wäre vielleicht hilfreicher.   Blush

Gruß Uwe
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste