访问VBA - 导出.csv模块,自定义文件名

时间:2016-11-14 10:46:24

标签: vba csv ms-access

我的Access导出到.csv模块有问题。一切正常在其他部分工作,如导入一个列表,导入第二个列表,执行查询和导出 IF 我没有更改我的输出文件名,我迷路了,不知道为什么更改输出文件名导致访问显示错误:

运行时错误:3027: 无法更新。数据库或对象是只读的。

一切正常如果输出文件保持默认。

以下模块代码:

Public Sub exportQuery(exportSQL As String)
Dim db As DAO.Database, qd As DAO.QueryDef
Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogSaveAs)

Set db = CurrentDb

'Check to see if querydef exists
For i = 0 To (db.QueryDefs.Count - 1)
    If db.QueryDefs(i).Name = "tmpExport" Then
        db.QueryDefs.Delete ("tmpExport")
        Exit For
End If
Next i

Set qd = db.CreateQueryDef("tmpExport", exportSQL)

'Set intial filename
fd.InitialFileName = "Deduplicated list_" & Format(Date, "mmddyyy") & ".csv"

If fd.Show = True Then
    If Format(fd.SelectedItems(1)) <> vbNullString Then
        DoCmd.TransferText acExportDelim, , "tmpExport", fd.SelectedItems(1), True
    End If
End If

'Cleanup
db.QueryDefs.Delete "tmpExport"
db.Close
Set db = Nothing
Set qd = Nothing
Set fd = Nothing

End Sub

2 个答案:

答案 0 :(得分:1)

抱歉:上面的评论中没有注意到 @Andre 为我提供了解决方案。非常感谢

好的,我找到了解决方案。问题是,当您键入自定义名称时,IT必须具有.csv扩展名。我实现了使用.csv

附加文件名的函数
Function getCSVName(fileName As String) As String
Dim pos As Long
pos = InStrRev(fileName, ".")
If (pos > 0) Then
fileName = Left$(fileName, pos - 1)
End If
getCSVName = fileName & ".CSV"

End Function

并在导出模块中使用它:

DoCmd.TransferText acExportDelim, , "tmpExport", getCSVName(fd.SelectedItems(1)), True

答案 1 :(得分:0)

当我在上面的代码中输入一个简单的SQL命令时,看起来很好,并在本地工作。 我建议检查您尝试执行的SQL命令。