Anzeige
Archiv - Navigation
1076to1080
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

GetSaveAsFilename - mögliche Dateiendungen ermitt.

GetSaveAsFilename - mögliche Dateiendungen ermitt.
07.06.2009 21:35:16
Norman
Hallo alle,
habe mal wieder ein komisches Problem :) Ich will GetSaveAsFilename nutzen. Klappt auch bestens. Jetzt möchte ich aber auch genau die Dateitypen als Filter anbieten, die Excel selbst anbietet. Normalerweise gibt es da, je nach Installation von Excel, unterschiedliche Endung von xls über xla bis xlsx und so weiter. Kann ich die verfügbaren Typen irgendwo auslesen und mir meinen eigenen Filter zusammenbauen, der dann genau wie der des "normalen" SaveAs Dialogs aussieht?
Vielen Dank für Eure Hilfe und Gruß
Norman

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Alternative : Application.Dialogs
07.06.2009 21:59:19
NoNet
Hallo Norman,
leider kenne ich spontan auch keine Möglichkeit, diese Dateitypen auszulesen, aber evtl. genügt es Dir, alternativ den Standard "Speichern unter..." Dialog anzuzeigen, der alle Dateitypen anbietet ?
Teste doch mal : Application.Dialogs(xlDialogSaveAs).Show
Gruß, NoNet
AW: GetSaveAsFilename - mögliche Dateiendungen ermitt.
07.06.2009 22:32:40
Josef
Hallo Norman,
das Auslesen ist kein Problem, aber der Parameter "FileFilter" verträgt maximal 256 Zeichen, da ist nach den ersten 5 oder 6 Dateitypen schluß.
Gruß Sepp

Werde bitte mal konkreter...
07.06.2009 22:35:10
NoNet
Hallo Sepp,
weshalb so "wortkarg" und "bescheiden" ?
Wenn Du eine Möglichkeit zum Auslesen kennst, dann lasse diese doch auch bitte die anderen Interessierten wissen ?
Konkret gefragt : Wie funktioniert das ? ;-)
Interessierte Grüße, NoNet
Anzeige
AW: Werde bitte mal konkreter...
07.06.2009 22:38:00
Josef
Hallo NoNet,
das geht so
Sub getSaveasDialog()
  Dim strFile As String, strFileFilter As String, strTmp As String
  Dim lngIndex As Long
  
  With Application.FileDialog(msoFileDialogSaveAs).Filters
    For lngIndex = 1 To .Count
      strTmp = .Item(lngIndex).Description & " (" & Replace(.Item(lngIndex).Extensions, ",", ";") & "), " & Replace(.Item(lngIndex).Extensions, ",", ";") & ", "
      If Len(strFileFilter & strTmp) < 256 Then
        strFileFilter = strFileFilter & strTmp
      Else
        Exit For
      End If
    Next
  End With
  
  If Len(strFileFilter) > 0 Then strFileFilter = Left(strFileFilter, Len(strFileFilter) - 2)
  
  strFile = Application.GetSaveAsFilename(fileFilter:=strFileFilter)
  
  If strFile <> "Falsch" Then
    MsgBox strFile
  End If
  
  
End Sub


macht aber, wie gesagt, nicht sonderlich viel Sinn.
Gruß Sepp

Anzeige
Mit API würde es gehen.
07.06.2009 22:46:54
Josef
Hallo Norman,
mit dem API-Dialog geht's.
' **********************************************************************
' Modul: Modul2 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Private Declare Function GetOpenFileName Lib "comdlg32.dll" _
  Alias "GetOpenFileNameA" (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 ShowOpen(Path As String, Filter As String, Flags As Long, hWnd As _
    Long, Optional FilterIndex As Long = 1&, Optional Title As String = "Datei Auswählen") As String

  Dim Buffer As String
  Dim Result As Long
  Dim ComDlgOpenFileName As OPENFILENAME
  
  Buffer = String$(128, 0)
  
  With ComDlgOpenFileName
    .lStructSize = Len(ComDlgOpenFileName)
    .hwndOwner = hWnd
    .Flags = Flags
    .nFilterIndex = FilterIndex
    .nMaxFile = Len(Buffer)
    .lpstrFile = Buffer
    .lpstrFilter = Filter
    .lpstrInitialDir = Path
    .lpstrTitle = Title
    
    
  End With
  
  Result = GetOpenFileName(ComDlgOpenFileName)
  
  If Result <> 0 Then
    ShowOpen = Left$(ComDlgOpenFileName.lpstrFile, _
      InStr(ComDlgOpenFileName.lpstrFile, _
      Chr$(0)) - 1)
  End If
End Function


Sub Datei_Waehlen()
  Dim Filter As String, FileName As String
  Dim Flags As Long, lngIndex As Long
  
  Flags = OFN_FILEMUSTEXIST Or OFN_HIDEREADONLY Or _
    OFN_PATHMUSTEXIST
  
  ' Filter = "Alle Dateien (*.*)" & Chr$(0) & "*.*" & Chr$(0) & _
    ' "Bilder (*.gif, *.jpg, *.jpeg, *.bmp)" & Chr$(0) & _
    ' "*.gif; *.jpg; *.jpeg; *.bmp" & Chr$(0) & Chr$(0)

  '' Oder
  
  ' Filter = "Alle Dateien (*.*)" & Chr$(0) & "*.*" & Chr$(0) & _
    ' "Excel Dateien (*.xls, *.xla, *.xlt, *.csv)" & Chr$(0) & _
    ' "*.xls; *.xla; *.xlt; *.csv" & Chr$(0) & Chr$(0)

  
  'oder
  With Application.FileDialog(msoFileDialogSaveAs).Filters
    For lngIndex = 1 To .Count
      Filter = Filter & .Item(lngIndex).Description & " (" & .Item(lngIndex).Extensions & ")" & _
        Chr$(0) & .Item(lngIndex).Extensions & Chr$(0)
    Next
  End With
  
  Filter = Filter & Chr$(0)
  
  FileName = ShowOpen("C:", Filter, Flags, 0, 2&, "Datei Auswählen")
  
  If FileName = "" Then Exit Sub
  MsgBox FileName
End Sub

Gruß Sepp

Anzeige
Super, Danke :)
07.06.2009 23:26:00
Norman
Hallo Josef,
das ist's!!!! Cool, dank Dir dafür!
Viele Grüße
Norman

275 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige