0

我正在尝试将记录从 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 格式?

4

1 回答 1

0

问题是某种类型的扩展验证,而不是文件名必须与规范中使用的相同: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

于 2021-05-06T09:22:41.053 回答