VBA 另存为自定义文件

VBA Save as custom file

我一直在尝试将一些 excel 数据保存为自定义文本文件格式。通过关注 this post,我并没有走得太远。 Excel 抛出 运行 时间错误“13”:类型不匹配。知道为什么会这样吗?

错误发生在第三行:

设置对话框=Application.GetSaveAsFilename(FileFilter:="Custom file, *.custom")

Sub SaveCustomData()
    Dim dialog As Variant
    Set dialog = Application.GetSaveAsFilename(FileFilter:="Custom file, *.custom")
    ' !!! The code runs this far !!!

    With dialog
        .InitialFileName = Application.ActiveWorkbook.Path & Application.PathSeparator
        .AllowMultiSelect = False

        Dim file As String
        Dim fso As FileSystemObject
        Set fso = New FileSystemObject
        Dim fileStream As TextStream

        If .Show = True Then
            file = .SelectedItems(1)

            Set fileStream = fso.CreateTextFile(dialog, ForWriting, True)

            ' Writing data to file here

            fileStream.Close

        End If
    End With
End Sub

Application.GetSaveAsFilename returns selected 文件的名称(或者 False 如果用户取消了对话框)。您不能(也不想)将其分配给您的 dialog 变量

你引用的post的问题使用Application.FileDialog(3)(3应该被常量msoFileDialogFilePicker代替),这个returns a Dialog - 这就是其余代码的构建方式。

但是,在 answer 的 post 中,使用了 Application.GetSaveAsFilename。由于此命令使用实际 sheet 的文件夹作为起始文件夹并且不允许多个 select,您的代码可以减少到

Sub SaveCustomData()
    Dim fileName As Variant
    fileName  = Application.GetSaveAsFilename(FileFilter:="Custom file, *.custom")
    if fileName = False then 
        MsgBox "No filename selected, data not saved"
        exit sub
    end if

    Dim file As String
    Dim fso As FileSystemObject
    Set fso = New FileSystemObject
    Dim fileStream As TextStream

    Set fileStream = fso.CreateTextFile(fileName, ForWriting, True)
    ...
End Sub