Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: SaveAs Dialog exakt wie in Excel

SaveAs Dialog exakt wie in Excel
norman
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
Anzeige
AW: SaveAs Dialog exakt wie in Excel
13.01.2010 06:32:55
fcs
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

Anzeige
AW: SaveAs Dialog exakt wie in Excel
15.01.2010 00:27:58
norman
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
Anzeige
AW: SaveAs Dialog exakt wie in Excel
15.01.2010 00:34:56
norman
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
AW: SaveAs Dialog exakt wie in Excel
15.01.2010 00:35:35
norman
Jetzt war ich zu blöd den noch offen Haken zu setzen....
AW: SaveAs Dialog exakt wie in Excel
15.01.2010 16:10:06
fcs
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

Anzeige
AW: SaveAs Dialog exakt wie in Excel
15.01.2010 16:19:32
Norman
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
AW: SaveAs Dialog exakt wie in Excel
16.01.2010 01:58:01
fcs
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
Anzeige
AW: SaveAs Dialog exakt wie in Excel
18.01.2010 23:10:33
norman
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
Anzeige
"Frage noch offen" wieder vergessen...
18.01.2010 23:11:52
norman
... Sorry ...
AW: "Frage noch offen" wieder vergessen...
19.01.2010 11:57:19
fcs
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

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

SaveAs Dialog exakt wie in Excel


Schritt-für-Schritt-Anleitung

  1. Öffne den VBA-Editor in Excel, indem Du Alt + F11 drückst.

  2. Füge ein neues Modul hinzu: Rechtsklicke im Projektfenster und wähle Einfügen > Modul.

  3. Kopiere den folgenden Code in das Modul, um einen SaveAs Dialog anzuzeigen:

    Sub OpenSaveAsDialog()
       Dim initialFileName As String
       initialFileName = "C:\Users\Public\Test\Test.xlsx"
       If Application.Dialogs(xlDialogSaveAs).Show(Arg1:=initialFileName) = False Then
           MsgBox "Datei wurde nicht gespeichert!", vbInformation + vbOKOnly
       Else
           ' Datei wurde gespeichert
       End If
    End Sub
  4. Starte das Makro: Drücke F5, um das Makro auszuführen und den Dialog zu testen.


Häufige Fehler und Lösungen

  • Problem: Der Dialog speichert sofort die Datei.

    • Lösung: Setze Cancel = True im Workbook_BeforeSave Ereignis, um den Speichervorgang zu stoppen.
  • Problem: Fehlende Optionen im Dialog.

    • Lösung: Verwende Application.GetSaveAsFilename, um den Dateinamen zu erhalten, aber beachte, dass hier keine erweiterten Optionen verfügbar sind.

Alternative Methoden

  1. Verwende GetSaveAsFilename:

    Dim fileName As Variant
    fileName = Application.GetSaveAsFilename()
    If fileName <> False Then
       ' Dateiname wurde ausgewählt
    End If

    Diese Methode zeigt einen einfachen Dialog ohne zusätzliche Optionen.

  2. Erstelle einen eigenen Dialog: Du kannst auch ein UserForm verwenden, um einen benutzerdefinierten Speichern-Dialog zu erstellen, der alle benötigten Optionen enthält.


Praktische Beispiele

Hier sind zwei Beispiele, wie Du den vba save as dialog effektiv nutzen kannst:

  1. Speichern mit Benutzerbenachrichtigung:

    Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
       Dim vSaveAs As Variant
       On Error GoTo Fehler
       Cancel = True
       Application.EnableEvents = False
    
       vSaveAs = Application.Dialogs(xlDialogSaveAs).Show
       If vSaveAs = False Then
           MsgBox "Datei wurde nicht gespeichert!"
       Else
           ' Speichervorgang hier ausführen
           MsgBox "Datei wurde erfolgreich gespeichert."
       End If
    
    Fehler:
       Application.EnableEvents = True
    End Sub
  2. SaveAs mit Statistik:

    Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
       Dim vSaveAs As Variant
       Dim stats As String
       On Error GoTo Fehler
       Cancel = True
       Application.EnableEvents = False
    
       stats = "Zusätzliche Informationen"
       vSaveAs = Application.Dialogs(xlDialogSaveAs).Show
       If vSaveAs Then
           ' Hier Statistiken speichern
           MsgBox "Datei mit Statistiken gespeichert."
       End If
    
    Fehler:
       Application.EnableEvents = True
    End Sub

Tipps für Profis

  • Interaktive Dialoge: Kombiniere den SaveAs Dialog mit weiteren VBA-Funktionen, um die Benutzererfahrung zu verbessern.
  • Ereignisprozeduren: Nutze die Workbook_BeforeSave-Ereignisprozedur, um die Logik zu steuern, bevor die Datei gespeichert wird.
  • Verwendung von Application.DisplayAlerts: Deaktiviere Benachrichtigungen während des Speichervorgangs, um ein reibungsloseres Erlebnis zu schaffen.

FAQ: Häufige Fragen

1. Wie kann ich den SaveAs Dialog anpassen?
Du kannst den Dialog nicht direkt anpassen, aber Du kannst ein UserForm erstellen, um benutzerdefinierte Optionen anzubieten.

2. Was ist der Unterschied zwischen GetSaveAsFilename und xlDialogSaveAs?
GetSaveAsFilename gibt nur einen Dateinamen zurück, während xlDialogSaveAs den vollständigen Dialog mit den Speichern-Optionen anzeigt.

3. Wie speichere ich die Datei ohne sofortige Bestätigung?
Verwende den Workbook_BeforeSave-Ereignis und setze Cancel = True, um den Speichervorgang zu stoppen, bis Du bereit bist zu speichern.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige