Microsoft Excel

Herbers Excel/VBA-Archiv

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

SaveAs Dialog exakt wie in Excel | Herbers Excel-Forum


Betrifft: SaveAs Dialog exakt wie in Excel von: norman
Geschrieben am: 13.01.2010 01:17:09

Hallo alle,

irgend wie stehe ich auf dem Schlauch. Ich will einen SaveAs-File Dialog, der genau wie der Excel-Save-As Dialog funktionert. Habe mit GetSaveAsFilename experimentiert, ist schon nicht schlecht, aaaaaber:

Es fehlt beim "Extras Button" der Eintrag "Allgemeine Optionen" - den brauche ich aber, weil die User das auch angeben können sollen...

Hat jemand eine Idee?

Viele Grüße
Norman

  

Betrifft: AW: SaveAs Dialog exakt wie in Excel von: fcs
Geschrieben am: 13.01.2010 06:32:55

Hallo Norman,

so wird der Original-Speichern-unter-Dialogangezeigt. Der vorgegebene Dateiname ist nicht unbedingt nötig.

Gruß
Franz

Sub test()
  Dim Intialfilename As String
  Intialfilename = "C:\Users\Public\Test\Test"
  If Application.Dialogs(xlDialogSaveAs).Show(Arg1:=Intialfilename) = False Then
    MsgBox "Datei wurde nicht gespeichert!", vbInformation + vbOKOnly
  Else
    'datei wurde gespeichert
  End If
End Sub



  

Betrifft: AW: SaveAs Dialog exakt wie in Excel von: norman
Geschrieben am: 15.01.2010 00:27:58

Hallo Franz,

das wäre das was ich brauchen würde, wenn es da nicht ein Problem gäbe. Ich möchte nicht, dass der Dialog schon speichert, sondern dass ich nur den Dateinamen + die Zusatzinformationen der Allgemeinen Optionen erhalte, um danach selbst zu speichern. Geht sowas?

Viele Grüße
Norman


  

Betrifft: AW: SaveAs Dialog exakt wie in Excel von: norman
Geschrieben am: 15.01.2010 00:34:56

Noch mal ergänzt dazu: Ich habe mich in BeforeSave eingehängt und will den SaveAs Dialog selbst steuern. Deshalb klappt das nicht mit xlDialogSaveAs.

Gruß
Norman


  

Betrifft: AW: SaveAs Dialog exakt wie in Excel von: norman
Geschrieben am: 15.01.2010 00:35:35

Jetzt war ich zu blöd den noch offen Haken zu setzen....


  

Betrifft: AW: SaveAs Dialog exakt wie in Excel von: fcs
Geschrieben am: 15.01.2010 16:10:06

Hallo Norman,

das Speichern/Speichern unter in das BeforeSave-Ereignismakro einbauen ist aber etwas tricky.

Zum einen muss du den gestarteten Speicher-Vorgang ggf. canceln und du muss zeitweise die Ereignismakros deaktivieren, damit der im Makro eingebaute Speichervorgang das Ereignis nicht nochmals aufruft (rekursiver Aufruf).

Neben dem Speichern-unter-Dialog, den ich hier aber doch verwenden würde. Gibt es unter VBA auch noch einen GetSaveAs-Dialog, der die Auswahl/Eingabe eines dateinamens erlaubt ohne beim Schließen die Datei zu speichern. Allerdingst gibt es in diesem Dialog nicht die Möglichkeit die Optionen zu ändern/auszuwählen.
Nachfolgend Beispiele für beide Varianten.

Gruß
Franz

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
  Dim vSaveAs
  On Error GoTo Fehler
  Cancel = True
  Application.EnableEvents = False 'Verhindert rekursiven Aufruf von BeforePrint
  'Speichernamen im Dialog abfragen/eingebn - Optionen nicht möglich
  'vSaveAs = Application.GetSaveAsFilename(fileFilter:="Excel(*.xls;*.xlsx;*.xlsm;*.xlsb)," _
      & "*.xls;();*.xlsx;*.xlsx;*.xlsb", _
      Title:="Bitte Namen der Datei für Speichern Unter wählen", _
      Buttontext:="Speichern Unter")
  vSaveAs = Application.GetSaveAsFilename(InitialFileName:=Me.Name, _
      fileFilter:="Excel(*.xls;*.xlsx;*.xlsm;*.xlsb)," _
      & "*.xls;();*.xlsx;*.xlsx;*.xlsb", _
      Title:="Bitte Namen der Datei für Speichern Unter wählen", _
      Buttontext:="Speichern Unter")
  If vSaveAs <> False Then 'Dialog wurde nicht abgebrochen
      Me.SaveAs vSaveAs
  Else
  
  End If
  Err.Clear
Fehler:
  With Err
    Select Case .Number
    Case Is = 0 'Alles OK
    
    Case Else
      MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description
    End Select
  End With
  Application.EnableEvents = True
End Sub


'oder

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
  Dim vSaveAs
  On Error GoTo Fehler
  Cancel = True
  Application.EnableEvents = False 'Verhindert rekursiven Aufruf von BeforePrint
    
  'Speicher unter im Dialog anzeigen - Optionen möglich
  vSaveAs = Application.Dialogs(xlDialogSaveAs).Show(arg1:=Me.Name)
  If vSaveAs = False Then MsgBox "Datei wurde nicht gespeichert!", vbInformation + vbOKOnly, _
      "D A T E I    S P E I C H E R N"
  Err.Clear
Fehler:
  With Err
    Select Case .Number
    Case Is = 0 'Alles OK
    
    Case Else
      MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description
    End Select
  End With
  Application.EnableEvents = True
End Sub



  

Betrifft: AW: SaveAs Dialog exakt wie in Excel von: Norman
Geschrieben am: 15.01.2010 16:19:32

Hey Franz,

genau das was ich machen will, cool :) Aber ich brauche diesen Dialog mit den erweiterten Einstellungen, der User im Fachbereich soll den Unterschied nämlich nicht erkennen, damit er nicht verwirrt ist. Bin für weitere Hinweise dankbar.

Viele Grüße
Norman


  

Betrifft: AW: SaveAs Dialog exakt wie in Excel von: fcs
Geschrieben am: 16.01.2010 01:58:01

Hallo Norman,

welche Aktionen sollen denn zwischen der Auswahl des Speichern-Unter-Namens und dem speichern der Datei noch ausgeführt werden?

Ich sehe jedenfalls kaum eine Chance als tätsächlich den Speichern-Unter-Dialog zu verwenden, wenn du den Anwendern deiner Datei dies vorgaukeln willst.

Warum willst denn die Mitarbeiter deiner Fachabteilungen denn unbedingt optisch durch diesen Dialog zwingen, wenn es gar nicht nötig ist?

Gruß
Franz


  

Betrifft: AW: SaveAs Dialog exakt wie in Excel von: norman
Geschrieben am: 18.01.2010 23:10:33

Hi Franz,

ist weniger das "Durchzwingen" als beim Speichern alle Optionen zur Verfügung stellen. Wäre halt klasse gewesen, wenn die Anwender "nichts unerwartetes" sehen würden. Ich habe ein Plugin geschrieben, dass beim Speichern zusätzliche statistische Daten in eine zentrale Datenbank schreibt. Und da ich das nur beim Speichern machen will hängt das Plugin in BeforeSave. Da ich aber den Original-Dialog so nicht hin bekomme, brauche ich ein Workaround. Habe an so was wie eine Menüleiste für "Datei-Öffnen-Passwort" und "Datei-Speichern-Passwort" gedacht. Finde das aber recht "unglücklich". Vielleicht fällt ja jemandem noch was ein? Dank Dir auf alle Fälle für Deine Hilfe Franz!

Viele Grüße
Norman


  

Betrifft: "Frage noch offen" wieder vergessen... von: norman
Geschrieben am: 18.01.2010 23:11:52

... Sorry ...


  

Betrifft: AW: "Frage noch offen" wieder vergessen... von: fcs
Geschrieben am: 19.01.2010 11:57:19

Hallo Norman,

du kann ja auch die statistischen Daten speichern nachdem der Speichern-Untervorgang abgeschlossen wurde. ggf. muss man die zu speichernden Infos vorher merken.

Allerdings kommt dann immer, wenn man die Datei unter dem gleichen Namen speichern will, eine Meldung dies zu bestätigen. Wenn der gleiche Dateiname nicht möglich sein soll, dann ggf. Datei immer schreibgeschützt öffnen lassen oder eine Mustervorlage verwenden.

Gruß
Franz

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
  Dim vSaveAs, sInfo1(1 To 2), sInfo2(1 To 2)
  On Error GoTo Fehler
  Cancel = True
  Application.EnableEvents = False 'Verhindert rekursiven Aufruf von BeforePrint
    
  'Speicher unter im Dialog anzeigen - Optionen möglich
  'Daten der aktiven datei merken
  sInfo1(1) = Me.Name
  sInfo1(2) = Me.Path
  Application.DisplayAlerts = False
  vSaveAs = Application.Dialogs(xlDialogSaveAs).Show(arg1:=Me.Name)
  If vSaveAs = False Then
    MsgBox "Datei wurde nicht gespeichert!", vbInformation + vbOKOnly, _
        "D A T E I    S P E I C H E R N"
    'Infos speichern wenn speichern abgebrochen wurde
  Else
    'Infos speichern, wenn Speichern-Untern durchgeführt wurde.
    sInfo2(1) = ActiveWorkbook.Name
    sInfo2(2) = ActiveWorkbook.Path
    
    MsgBox "Datei wurde gespeichert!" & vbLf _
        & "Name alt:  " & sInfo1(1) & vbLf _
        & "Name neu:" & sInfo2(1) & vbLf _
        & "Verzeichnis alt:  " & sInfo1(2) & vbLf _
        & "Verzeichnis neu:" & sInfo2(2), vbInformation + vbOKOnly, _
        "D A T E I    S P E I C H E R N" 'Testzeile
  End If
  Err.Clear
Fehler:
  Application.DisplayAlerts = True
  With Err
    Select Case .Number
    Case Is = 0 'Alles OK
    Case Else
      MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description
    End Select
  End With
  Application.EnableEvents = True
End Sub



Beiträge aus den Excel-Beispielen zum Thema "SaveAs Dialog exakt wie in Excel"