Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

msofiledialogsaveas speichert nicht

Betrifft: msofiledialogsaveas speichert nicht von: Matthias
Geschrieben am: 13.08.2014 19:32:12

Hallo Gemeinde,

ersteinmal vielen Dank an die Beiträge, die mich bei meinen bisherigen Problemen sehr gut unterstützt haben.
Meine Problem wurde schon ähnlich hier im Forum behandelt: https://www.herber.de/forum/archiv/1228to1232/1228284_xltmDatei_nach_oeffnen_als_xlsm_abspeichern.html.
Solange ich den Boardeigenen "Speichern", "Speichern unter" Button, die Tastenkürzel "Strg + S" oder "F12" verwende funktioniert alles wunderbar. Ich lasse per Makro die Ribbon-Leiste ausblenden, daher steht dem Benutzer kein "Speichern" Button, oder Dateimenü zur Verfügung.
Ich möchte das Speichern auch per Makro lösen und habe daher in einem Modul ein Sub angelegt.

Sub Speichern_neu()
    With ThisWorkbook
        .save
End Sub

Das Makro im ActiveWorkbook sieht äquivalent zu oben im Link beschriebenen aus.
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
'  MsgBox "Datei-Format: " & Me.FileFormat   ' Testzeile
  Dim iFilterIndex As Integer
  If Me.Path = "" Then 'Prüfen, ob Datei schon gespeichert wurde
    Application.EnableEvents = False
    Cancel = True
    If Val(Left(Application.Version, 2)) >= 12 Then 'Excel-Versionsprüfung
      'Excelversion 2007 und neuer
      Select Case Me.FileFormat
        Case 52             'xlOpenXMLWorkbookMacroEnabled - Excel 2007 mit Makros
          iFilterIndex = 2  'Standardmäßig xlsm  unter Excel 2007
        Case 56             'xlExcel8  - Excel 98 bis 2003
          iFilterIndex = 4  'Standardmäßig xls  unter Excel 2007
        Case Else
          iFilterIndex = 1  'Standardmäßig xlsx  unter Excel 2007
      End Select
      'Speichern unter Dialog anzeigen
      With Application.FileDialog(2)  '2 = msoFileDialogSaveAs
        .InitialView = 2              '2 = msoFileDialogViewDetails
        .FilterIndex = iFilterIndex
        If .Show <> False Then
          .Execute
        End If
      End With
    Else
      'Ältere Excelversionnen - SaveAs Dialog anzeigen
      Application.Dialogs(5).Show     '5 = xlDialogSaveAs
    End If
    Application.EnableEvents = True
  End If
End Sub

Es erscheint keine Fehlermeldung, aber es wird keine Datei angelegt! Ich finde leider den Fehler nicht und bitte daher um Ihre Mithilfe.

Vielen Dank schon im Voraus

Gruß Matthias

  

Betrifft: AW: msofiledialogsaveas speichert nicht von: fcs
Geschrieben am: 14.08.2014 10:27:00

Hallo Mathias,

wie du festgestellt hast funktioniert das Workbook_BeforeSave in dem Link nur wenn die von Excel zur Verfügung gestellten Schaltflächen und Menüs für Speichern bzw Speichern_Unter benutzt werden.

Wird der Speichern-Befehl von einem anderen Makro ausgeführt, dann kommt es an irgendeiner Stelle im Makro-Ablauf zu einer Fehlfunktion, die aber keine Fehlermeldung generiert. Scheinbar verheddert sich Excel irgendwo in dem Gestrüpp aus Ereignismakros und Dialog_anzeigen abbrechen und dann doch wieder anzeigen.

Ausweg: Integriere alle erforderlichen Speicherfunktionen und Dialoganzeigen in dein Makro "Speichern_neu".
In dem Before_Save-Ereignismakro wird dann nur noch der SaveAs-Dialog blockiert und eine Meldung angezeigt.

Gruß
Franz

'Speichern-Makro in einem allgemeinen Modul
Sub Speichern_neu()
'  MsgBox "Datei-Format: " & Me.FileFormat   ' Testzeile
  Dim iFilterIndex As Integer
  If ActiveWorkbook.Path = "" Then 'Prüfen, ob Datei schon gespeichert wurde
    Application.EnableEvents = False
    If Val(Left(Application.Version, 2)) >= 12 Then 'Excel-Versionsprüfung
      'Excelversion 2007 und neuer
      Select Case ActiveWorkbook.FileFormat
        Case 52             'xlOpenXMLWorkbookMacroEnabled - Excel 2007 mit Makros
          iFilterIndex = 2  'Standardmäßig xlsm  unter Excel 2007
        Case 56             'xlExcel8  - Excel 98 bis 2003
          iFilterIndex = 4  'Standardmäßig xls  unter Excel 2007
        Case Else
          iFilterIndex = 1  'Standardmäßig xlsx  unter Excel 2007
      End Select
      'Speichern unter Dialog anzeigen
      With Application.FileDialog(2)  '2 = msoFileDialogSaveAs
        .InitialView = 2              '2 = msoFileDialogViewDetails
        .FilterIndex = iFilterIndex
        If .Show <> False Then
          .Execute
        End If
      End With
    Else
      'Ältere Excelversionnen - SaveAs Dialog anzeigen
      Application.Dialogs(5).Show     '5 = xlDialogSaveAs
    End If
    Application.EnableEvents = True
  Else
    ActiveWorkbook.Save
  End If
End Sub

'Makro unter "DieseArbeitsmappe"

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
  Dim iFilterIndex As Integer
  If SaveAsUI = True Then 'Prüfen, ob SaveAsDialog angezeigt wird
    Cancel = True
    MsgBox "Zum Speichern einer neuen Datei bitte nur die zur Verfügung " _
      & "gestellten Schaltflächen/Makros nutzen!", vbInformation + vbOKOnly, "Speichern unter"
  End If
End Sub




  

Betrifft: AW: msofiledialogsaveas speichert nicht von: Matthias
Geschrieben am: 14.08.2014 11:14:07

Hallo Franz,

vielen Dank für deine schnelle Hilfe. Ist das Verhalten bei anderen exceleigenen Ereignissen äquivalent, oder auf das Speichern begrenzt?

Gruß Matthias


  

Betrifft: AW: Workbook Ereignismakros - Probleme von: fcs
Geschrieben am: 14.08.2014 12:48:14

Hallo Mathias,

ich habe keine Übersicht von problematischen Anweisungen im Zusamenhang mit den Ereignismakros.

Meines Wissens ist es aber z.B. keine gute Idee, innerhalb des BeforePrint-Ereignismakros Druckdialoge anzuzeigen oder Druckjobs abzuschicken.

Bei den meisten anderen Ereignissen funktioniert das vorübergehende Deaktivieren der Ereignismakros reibungslos.

Gruß
Franz