用msoFileDialogFilePicker保存

我已经在这个主题上进行了很多search,我尝试了很多东西。 实际上,我需要让用户保存为msoFileDialogSaveAsfilter中不可用的自定义types。

我知道我可以保存,比如说, *.txt ,然后在保存之前更改扩展名。 我这样做,它的工作原理,但是当用户在已经包含自定义types的其他文件的文件夹中input文件的名称时,用户将看不到现有的自定义文件列表,因为活动的filter不是这种types。

因此,我想知道是否有办法使用msoFileDialogFilePicker通过键入文件的名称保存为自定义types。

以下是可能的样子:

 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 

谢谢您的帮助!

就像我在评论中提到的那样,你可以使用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 

在行动

在这里输入图像描述