Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Dateityp bei Save as vorgeben
#1
Hallo VBA-Freunde,

Ich möchte eine Datei per VBA speichern und dabei die Dialogbox "Speichern unter" verwenden.
Mein Codeschnipsel

Pfad = "G:\"
Application.Dialogs(xlDialogSaveAs).Show Pfad & Sname

funktioniert. Nur möchte ich gerne den Dateityp XLSM gleich vorgeben.

Wie müsste das erweitert werden?
Ach so, Für Excel 2010 und höher.

Vielen Dank für eure Antworten.

Heinz
Es ist nicht genug, zu wissen. Man muss es auch anwenden.
Es ist nicht genug, zu wollen. Man muss es auch tun.
Antworten Top
#2
Hallo Heinz,
Application.Dialogs(xlDialogSaveAs).Show Pfad & Sname, 52
Gruß Uwe
Antworten Top
#3
Hi Heinz,

(19.04.2017, 07:07)Heinz Ulm schrieb: Pfad = "G:\"
Application.Dialogs(xlDialogSaveAs).Show Pfad & Sname

funktioniert. Nur möchte ich gerne den Dateityp XLSM gleich vorgeben.

ich habe diverse Schnipsel zum testen:

        ActiveWorkbook.SaveAs strSaveDatei, FileFormat:=xlOpenXMLWorkbook
oder
Code:
Function SpeichernUnter(VorgabeName As String) As String
  ' Dialog Aufrufen um den Speicherort zu bestätigen oder einen anderen Speicherort anzugeben und zu bestätigen
  'Kann auch abgebrochen werden. dann ist der Rückgabewert ein "Falsch", sonst der Pfad und Dateiname
 
  SpeichernUnter = Application.GetSaveAsFilename(InitialFileName:=VorgabeName, Excel Dateien (*.xlsm),*.xlsm*", FilterIndex:=1, Title:="Speichern unter...", ButtonText:="speichern")
  'strSaveDatei = SpeichernUnter
End Function

entnommen von hier:
Speichern unter

Code:
Sub Speichern_unter1()

Dim strDateiName As String
Dim strVerzeichnisPfad As String
Dim strSaveDatei As String
Dim bSpeichernDialog As Boolean
Dim bSpeichern As Boolean

bSpeichern = False
'Wert True = es wird defintiv gespeichert. False = nichts Speichern

'------------------------------------------------------------------------
'Festlegen ob der Speichern unter Dialog (GetSaveAsFileName) überhaupt aufgerufen werden soll
'Wert auf False setzen wenn dies nicht gewünscht wird. Kann auch durch eine Zellabfrage (0 oder 1) erfolgen
'dann bSpeichernDialog = Range("X1") wobei eine 0 Falsch und alles andere Wahr bedeutet. Ansonsten hier Manuell festlegen

bSpeichernDialog = Range("X1")
'bSpeichernDialog = False

'------------------------------------------------------------------------

'Verzeichnispfad Vorschlag festlegen
strVerzeichnisPfad = "c:\temp\"

'Dateiname aus Zelle F4 des aktuellen Blatts holen und Datum (Sortierbar) und Dateierweiterung dranhängen. Die yyymmdd ist bei sortierung richtig
strDateiName = Range("F4") & Format(Date, "_yyyymmdd") & ".xlsm"

'Speicherpfad und Dateiname zusammenfügen
strSaveDatei = strVerzeichnisPfad & strDateiName

'------------------------------------------------------------------------

'Mit dem jetzt vorhandenen Dateiname inkl. Pfad abfragen ob der Speicherort OK ist.
'Dazu das Dialogfenster GetSaveAsFilename aufrufen (Achtung, mus Zwingend Bestätigt werden
'Dies aber nur falls der Dialog abgefragt werden soll. bSpeicherDialog regelt dies über Wahr / Unwahr
If bSpeichernDialog Then
    'Dialog zum bestätigen des Speicherorts und Datename aufrufen. Achtung, kann auch mit Abbrechen beendet werden
    'Zuweisen des endgültigen Dateinamens oder ein Falsch wenn abbruch
    strSaveDatei = SpeichernUnter(strSaveDatei)
    
    'Wurde abgebrochen?
    If strSaveDatei = "Falsch" Then
        'Es wurde im Speicherdialog auf Abbrechen geklickt. Nichts zu tun und Tschüß
        bSpeichern = False
        'Exit Sub
        'Mit Exit Sub kann hier die gesamte restliche SUB beendet werden. Unschön, aber manchmal nötig
    Else
        'Im Dialog wurde auf Speichern geklickt
        bSpeichern = True
    End If
Else
    'Der Dialog sollte nicht aufgerufen werden, also wird der DateiPfad und Name als gegeben und nicht änderbar angenommen.
    bSpeichern = True
End If
'------------------------------------------------------------------------

'Bestimmen ob dies eine Neue datei oder eine schon vorhandene ist.
'Falls neu, das .SaveAs verwenden. Wen die Datei schon vorhanden ist, wird zwingend ein Dialog wegen überschreibung eingeblendet
'daher falls die Datei schon vorhanden ist, das .Save verwenden was einen Überschreiben Dialog nicht aufruft
Do While bSpeichern
    If DateiVorhanden(strSaveDatei) Then
        'Datei wird überschrieben OHNE Dialog
        ActiveWorkbook.Save
    Else
        'Datei wird erstmalig erstellt Ohne Dialog
        ActiveWorkbook.SaveAs strSaveDatei
    End If
    bSpeichern = False
Loop

End Sub


Function SpeichernUnter(VorgabeName As String) As String
' Dialog Aufrufen um den Speicherort zu bestätigen oder einen anderen Speicherort anzugeben und zu bestätigen
'Kann auch abgebrochen werden. dann ist der Rückgabewert ein "Falsch", sonst der Pfad und Dateiname

    SpeichernUnter = Application.GetSaveAsFilename(InitialFileName:=VorgabeName, Filefilter:="Excel Dateien (*.xlsm),*.xlsm*", FilterIndex:=1, Title:="Speichern unter...", ButtonText:="speichern")
    'strSaveDatei = SpeichernUnter
End Function


Function DateiVorhanden(DateipfadName As String) As Boolean
'Über die Dir Funktion schauen ob die Datei existirt. Wenn ja, wird der dateiname zurückgegeben, sonst ein null String
'Mit dem vergleich > wird geschaut ob etwas zurück kam. Ergebniss ist True oder False

    DateiVorhanden = (Dir(DateipfadName) > "")
  
End Function
Antworten Top
#4
Hallo Uwe,
hallo Ralf,

vielen Dank für eure Lösungen.

Faulheit siegt, deshalb habe ich mich für Uwe's Rat mit ,52 entschieden und getestet.

Es läuft so wie ich es wollte.

Danke
Viele Grüße
Heinz
Es ist nicht genug, zu wissen. Man muss es auch anwenden.
Es ist nicht genug, zu wollen. Man muss es auch tun.
Antworten Top
#5
Hi Heinz,

(19.04.2017, 08:12)Heinz Ulm schrieb: Faulheit siegt, deshalb habe ich mich für Uwe's Rat mit ,52 entschieden und getestet.

klar, hätte ich auch so gemacht.

Das andere ist halt für später nachvollziehbarer.

Hier die FileFormat-Nummern:
Zitat:These are the main file formats in Excel 2007-2016,
Note: In Excel for the Mac the values are +1

51 = xlOpenXMLWorkbook (without macro's in 2007-2016, xlsx)
52 = xlOpenXMLWorkbookMacroEnabled (with or without macro's in 2007-2016, xlsm)
50 = xlExcel12 (Excel Binary Workbook in 2007-2016 with or without macro's, xlsb)
56 = xlExcel8 (97-2003 format in Excel 2007-2016, xls)
Antworten Top


Gehe zu:


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