Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Application.FileDialog(msoFileDialogSaveAs)

Forumthread: Application.FileDialog(msoFileDialogSaveAs)

Application.FileDialog(msoFileDialogSaveAs)
Philipp
Hallo,
ich möchte nur bestimmte Dateiformate beim speichern zulassen. Die Filterfunktion funktioniert hier nicht (oder jedenfalls bei mir)
Ich arbeite übrigens in WORD und dort gibt es die Application.GetSaveAsFilename Anweisung nicht.
Sub test
Set oFileDialog = Application.FileDialog(msoFileDialogSaveAs)
With oFileDialog
.Title = "Auto Report Save as"
.ButtonName = "speichern"
.InitialFileName = "AutoReport_"
.Filters.Clear
.Filters.Add "word-files", "*.doc"
If .Show = -1 Then
.Execute
sName = .SelectedItems(1)
Else
Exit Sub
End If
End Sub
hat jemand von euch eine Idee. Wie ich nur ein bestimmtes Format zulassen kann?
Danke für eure Hilfe.
Phil
Anzeige

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Application.FileDialog(msoFileDialogSaveAs)
03.12.2009 16:39:39
Josef
Hallo Phil,
ich verwende das hier.
' **********************************************************************
' Modul: Modul2 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Private Declare Function GetSaveFileName Lib "comdlg32.dll" _
  Alias "GetSaveFileNameA" (pOpenfilename As OPENFILENAME) _
  As Long


Private Type OPENFILENAME
  lStructSize As Long
  hwndOwner As Long
  hInstance As Long
  lpstrFilter As String
  lpstrCustomFilter As String
  nMaxCustFilter As Long
  nFilterIndex As Long
  lpstrFile As String
  nMaxFile As Long
  lpstrFileTitle As String
  nMaxFileTitle As Long
  lpstrInitialDir As String
  lpstrTitle As String
  Flags As Long
  nFileOffset As Integer
  nFileExtension As Integer
  lpstrDefExt As String
  lCustData As Long
  lpfnHook As Long
  lpTemplateName As String
End Type

Public Const OFN_FILEMUSTEXIST As Long = &H1000&
Public Const OFN_HIDEREADONLY As Long = &H4&
Public Const OFN_PATHMUSTEXIST As Long = &H800&


Public Function ShowSave(Filter As String, Flags As Long, _
    hWnd As Long, FileName As String) As String

  
  Dim Buffer As String
  Dim Result As Long
  Dim ComDlgOpenFileName As OPENFILENAME
  
  Buffer = FileName & String$(128 - Len(FileName), 0)
  
  With ComDlgOpenFileName
    .lStructSize = Len(ComDlgOpenFileName)
    .hwndOwner = hWnd
    .Flags = OFN_HIDEREADONLY Or OFN_PATHMUSTEXIST
    .nFilterIndex = 1&
    .nMaxFile = Len(Buffer)
    .lpstrFile = Buffer
    .lpstrFilter = Filter
  End With
  
  Result = GetSaveFileName(ComDlgOpenFileName)
  
  If Result <> 0 Then
    ShowSave = Left$(ComDlgOpenFileName.lpstrFile, _
      InStr(ComDlgOpenFileName.lpstrFile, _
      Chr$(0)) - 1)
  End If
End Function

Sub Datei_Speichern()
  Dim Filter As String, FileName As String
  Dim Flags As Long, lngIndex As Long
  
  Flags = OFN_FILEMUSTEXIST Or OFN_HIDEREADONLY Or _
    OFN_PATHMUSTEXIST
  
  Filter = "Word-Dateien (*.doc*)" & Chr$(0)
  
  Filter = Filter & Chr$(0)
  
  FileName = ShowSave(Filter, Flags, Application.hWnd, "AutoReport_.doc")
  
  If FileName <> "" Then
    MsgBox FileName
  End If
  
End Sub

Gruß Sepp

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige

Infobox / Tutorial

Anwendung von Application.FileDialog(msoFileDialogSaveAs) in VBA


Schritt-für-Schritt-Anleitung

Um das Application.FileDialog(msoFileDialogSaveAs)-Objekt in Excel VBA zu verwenden, um nur bestimmte Dateiformate beim Speichern zuzulassen, folge diesen Schritten:

  1. Öffne den VBA-Editor: Drücke ALT + F11 in Excel.

  2. Füge ein neues Modul hinzu: Klicke mit der rechten Maustaste auf "VBAProject (DeineDatei.xlsx)" > Einfügen > Modul.

  3. Kopiere und füge den folgenden Code ein:

    Sub SaveAsWithFilter()
       Dim oFileDialog As FileDialog
       Set oFileDialog = Application.FileDialog(msoFileDialogSaveAs)
    
       With oFileDialog
           .Title = "Auto Report Save as"
           .ButtonName = "Speichern"
           .InitialFileName = "AutoReport_"
           .Filters.Clear
           .Filters.Add "Word-Dateien", "*.doc"
           If .Show = -1 Then
               .Execute
               MsgBox "Datei gespeichert als: " & .SelectedItems(1)
           Else
               MsgBox "Speichern abgebrochen."
           End If
       End With
    End Sub
  4. Führe das Makro aus: Drücke F5, um das Makro zu starten.

Dieser Code zeigt den "Speichern unter"-Dialog und beschränkt die Auswahl auf Word-Dateien (*.doc).


Häufige Fehler und Lösungen

  • Fehler: Keine Filter sichtbar
    Lösung: Stelle sicher, dass du .Filters.Clear vor dem Hinzufügen neuer Filter verwendest, um vorherige Filter zu entfernen.

  • Fehler: Dialog wird nicht angezeigt
    Lösung: Überprüfe, ob der Code im richtigen Kontext (z.B. in einer Subroutine) ausgeführt wird.

  • Fehler: Datei wird nicht gespeichert
    Lösung: Vergewissere dich, dass das .Execute-Kommando korrekt ausgeführt wird und dass die Datei nicht bereits geöffnet ist.


Alternative Methoden

Falls du in Word arbeitest und die Application.GetSaveAsFilename-Methode benötigst, kannst du stattdessen die folgende Methode verwenden:

Sub SaveAsDialog()
    Dim filePath As String
    filePath = Application.GetSaveAsFilename( _
        FileFilter:="Word-Dateien (*.doc), *.doc", _
        Title:="Bitte wählen Sie den Speicherort")

    If filePath <> "False" Then
        MsgBox "Datei gespeichert als: " & filePath
    Else
        MsgBox "Speichern abgebrochen."
    End If
End Sub

Diese Methode verwendet keine FileDialog-Objekte, sondern öffnet einen standardmäßigen Speichern-Dialog.


Praktische Beispiele

Hier sind einige Beispiele, wie du den FileDialog in verschiedenen Szenarien verwenden kannst:

  1. Speichern als PDF:

    Sub SaveAsPDF()
       Dim oFileDialog As FileDialog
       Set oFileDialog = Application.FileDialog(msoFileDialogSaveAs)
    
       With oFileDialog
           .Title = "PDF speichern"
           .Filters.Clear
           .Filters.Add "PDF-Dateien", "*.pdf"
           If .Show = -1 Then
               ' Speichern als PDF
               ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=.SelectedItems(1)
           End If
       End With
    End Sub
  2. Speichern mit verschiedenen Dateitypen:

    Sub SaveWithMultipleFilters()
       Dim oFileDialog As FileDialog
       Set oFileDialog = Application.FileDialog(msoFileDialogSaveAs)
    
       With oFileDialog
           .Title = "Datei speichern"
           .Filters.Clear
           .Filters.Add "Excel-Arbeitsmappe", "*.xlsx"
           .Filters.Add "CSV-Datei", "*.csv"
           If .Show = -1 Then
               MsgBox "Datei gespeichert als: " & .SelectedItems(1)
           End If
       End With
    End Sub

Tipps für Profis

  • Filter dynamisch anpassen: Du kannst die Filter zur Laufzeit basierend auf Benutzerentscheidungen hinzufügen oder entfernen.
  • Benutzerdefinierte Filter erstellen: Verwende .Filters.Add mit spezifischen Bedingungen, um die Benutzererfahrung zu verbessern.
  • Fehlerbehandlung einfügen: Implementiere On Error Resume Next, um Fehler beim Öffnen des Dialogs zu behandeln.

FAQ: Häufige Fragen

1. Wie kann ich mehrere Dateiformate im Dialog zulassen?
Du kannst mehrere Filter hinzufügen, indem du .Filters.Add mehrfach aufrufst.

2. Funktioniert dieser Code in Excel 2013 und später?
Ja, der Code ist kompatibel mit Excel 2013 und allen späteren Versionen.

3. Kann ich den Dialog anpassen?
Ja, du kannst Titel, Schaltflächennamen und Filter anpassen, um den Dialog deinen Bedürfnissen anzupassen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige