2013-11-28 2 views
5

Я уже много раз искал эту тему, и я много пробовал. На самом деле, мне нужно попросить пользователя сохранить как пользовательский тип, который недоступен в фильтрах msoFileDialogSaveAs.Сохранить с помощью msoFileDialogFilePicker

Я знаю, что могу сохранить как, допустим, *.txt, а затем изменить расширение перед сохранением. Я сделал это, и это сработало, но когда пользователь вводит имя файла в папку, уже содержащую другие файлы настраиваемого типа, пользователь не увидит список существующих пользовательских файлов, потому что активный фильтр не относится к этому типу.

Таким образом, мне было интересно, есть ли способ использовать msoFileDialogFilePicker, чтобы сохранить как пользовательский тип, введя имя файла.

Вот что может выглядеть следующим образом:

Function userFileSaveDialog_OneFilterOnly(iFilter As String, _ 
            iExtension As String, _ 
            Optional iTitle As String) 

    With Application.FileDialog(msoFileDialogFilePicker) '(msoFileDialogSaveAs) 
     .Filters.Clear 
     .Filters.Add iFilter, iExtension 
     .AllowMultiSelect=False 
     .ButtonName "Save" 
     .Title = iTitle 
     If CBool(.Show) Then 
      userFileSaveDialog_OneFilterOnly = .SelectedItems(.SelectedItems.Count) 
     Else 
     End If 
    End With 

End Function 

Спасибо за помощь!

+0

Почему бы не использовать 'Application.GetSaveAsFilename' Это позволит использовать фильтр, как вы хотите –

+0

Рад, что все получилось :) –

ответ

3

Как я уже говорил в комментариях, вы можете использовать Application.GetSaveAsFilename

Синтаксис является

expression.GetSaveAsFilename(InitialFilename, FileFilter, FilterIndex, Title, ButtonText)

А вот пример использования его

Sub Sample() 
    Dim Ret 

    Ret = userFileSaveDialog_OneFilterOnly("My Special Files", "Sid", "An Example") 

    MsgBox Ret 
End Sub 

Function userFileSaveDialog_OneFilterOnly(iFilter As String, _ 
              iExtension As String, _ 
              Optional iTitle As String) 
    Dim Ret 

    Ret = Application.GetSaveAsFilename(fileFilter:=iFilter & _ 
                " (*." & _ 
                iExtension & _ 
                "), *." & iExtension, _ 
                Title:=iTitle) 

    If Ret <> False Then userFileSaveDialog_OneFilterOnly = Ret 
End Function 

в действии

enter image description here

+0

Отлично! Не знал об этом. Я думал, что объект FileDialog был единственным способом. Благодаря! –

Смежные вопросы