【问题标题】:How to export csv from Access and allow end user to name file?如何从 Access 导出 csv 并允许最终用户命名文件?
【发布时间】:2021-05-04 21:09:36
【问题描述】:

我正在尝试将记录从 MS Access 导出到 .csv 文本文件。

我的代码目前看起来像:

Private Sub Command26_Click()
    Dim fd As FileDialog
    Dim fileName As String

    Set fd = Application.FileDialog(msoFileDialogOpen)
    
    With fd
            .Filters.Clear
            .Filters.Add "Text Files", "*.csv"
            .InitialFileName = "C:\My\Location"
    End With
    
    fd.Show
    fileName = fd.SelectedItems(1)

    DoCmd.TransferText acExportDelim, "AutoCADcsv", "Q_ExportList", fileName, False, ""
    Beep
    MsgBox "Success! CSV exported.", vbInformation, "Export CSV Success"
End Sub

我的问题是用户无法为 csv 命名他们想要的任何名称,它必须与 DoCmd.TransferText 的 SpecificationName 变量指定的文件名匹配。

有没有办法让用户能够命名 .CSV,同时仍然保持我在 SpecificationName 文件中定义的最终 .CSV 格式?

【问题讨论】:

    标签: vba ms-access


    【解决方案1】:

    问题是某种类型的扩展验证,而不是文件名必须与规范中使用的相同:myfile.txt 保存而 myfile.123 或只是 myfile 遇到无法更新错误。

    我有两种解决方法,但都不是理想的。首先,如果您使用 FileDialog(msoFileDialogOpen),则对话框旨在选择而不是创建文件,因此最终用户应最小化对话框并使用 .txt 或 .csv 之类的扩展名创建所需的文件名和位置。接下来返回对话框并选择他们的新文件。不理想。此解决方法允许在对话框上设置过滤器,但在这种情况下有什么意义呢?

    第二种解决方法使用更合适的 FileDialog(msoFileDialogSaveAs),但在 Access 2016 中,您只能获得所有文件过滤器,并且无法更改。这是我的代码:

    Private Sub Command0_Click()
     Dim fd As FileDialog
     Dim fileName As String
     Set fd = Application.FileDialog(msoFileDialogSaveAs)
     fd.Show
     fileName = fd.SelectedItems(1)
     DoCmd.TransferText acExportDelim, "AutoCADcsv", "Q_Export_List", fileName, False, ""
     Beep
     MsgBox "Success! CSV exported.", vbInformation, "Export CSV Success"
    End Sub
    

    扩展问题最终在这里发现:https://www.access-programmers.co.uk/forums/threads/cannot-update-database-or-object-may-be-read-only.184720/

    记住文件名必须有适当的扩展名。我已经测试了 .txt 和 .csv

    【讨论】:

    • 谢谢!现在看到它很有意义,我正陷入困境,试图想出一些其他的解决方案。
    猜你喜欢
    • 2016-06-14
    • 2010-09-20
    • 1970-01-01
    • 1970-01-01
    • 2015-02-05
    • 1970-01-01
    • 2020-06-04
    • 1970-01-01
    • 2020-06-01
    相关资源
    最近更新 更多