使用msoFileDialogFilePicker保存

sim*_*MAn 5 excel vba excel-vba

我已经在这个问题上搜索了很多,我尝试了很多东西.实际上,我需要让用户保存为msoFileDialogSaveAs过滤器中不可用的自定义类型.

我知道我可以保存为,*.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
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助!

Sid*_*out 4

就像我在评论中提到的,你可以使用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
Run Code Online (Sandbox Code Playgroud)

行动中

在此输入图像描述