【发布时间】:2018-10-29 21:37:14
【问题描述】:
我想从 access 数据库中将查询导出为文本文件,但使用 vba。问题是我需要以 .ail2 的名称保存它。
基本上我想要它的形式:"currentdate_version.ail2".txt(引号非常重要,否则它将不起作用)。
例如,今天的第一个版本如下所示:
“20182910_1.ail2”.txt
我已尝试手动导出并将其另存为,但导出向导似乎不喜欢保存名称中的引号。因此,我一直在导出它(使用我标记为 test1 的自定义保存导出 - 它包括每列的标题,将文本限定符设置为“无”,字段分隔符设置为“制表符”,文件格式为“分隔” )。
我在访问中使用以下代码,第一部分只是确保当前日期的文件夹存在。
Private Sub ExportExcel()
Dim myQueryName As String
Dim myExportFileName As String
Dim strSheets As String
Dim sFolderPath As String
Dim filename As Variant
Dim i As Integer
strSheets = Format(Date, "yyyymmdd")
sFolderPath = "M:\AIL2Files\" & strSheets & ""
Dim fdObj As Object
Set fdObj = CreateObject("Scripting.FileSystemObject")
If fdObj.FolderExists("" & sFolderPath & "") Then
Else
fdObj.CreateFolder ("" & sFolderPath & "")
End If
i = 1
filename = Dir(sFolderPath & "\*" & i & ".txt")
Do While Len(filename) > 0
filename = Dir(sFolderPath & "\*" & i & ".txt")
i = i + 1
Loop
myQueryName = "001_querytest"
myExportFileName = "" & sFolderPath & "\" & Chr(34) & "" & strSheets & "_" & i & ".ail2" & Chr(34) & ".txt"
DoCmd.TransferText acExportDelim, "test1", myQueryName, myExportFileName, True
End Sub
test1 没有被拾取,即使它是“保存的导出”。我认为我做错了这部分......但即使我仍然认为保存不会成功并且不会包含引号。
谢谢。
编辑:
我已尝试执行以下操作:
DoCmd.TransferText transferType:=acExportDelim, TableName:=myQueryName, filename:=myExportFileName, hasfieldnames:=True
它现在保存,但再次不包括所需的引号。有趣的是,当我在即时窗口中键入 ?myExportFileName 时,它会显示我想要的文件名,但是当我得到它的形式时,该命令显然无法正常工作:
_20181029_1#ail2_
相反...
【问题讨论】:
-
文件名不能包含引号(参见reserved characters 列表)。如果引号真的很重要,我认为你应该重新设计你的代码,不要让它们变得必要。
-
我认为会是这种情况......我担心它是不可能的,虽然 .ail2 文件被不同的软件使用并且如果我去“另存为”它就可以工作文本文件并将其与引号一起保存...它可以工作,我得到了我的 ail2 文件...
-
我真的看不出还有哪些软件可能在使用包含引号的文件名,因为操作系统禁止使用引号。很遗憾地告诉您,您将永远无法使用名称中的引号来保存文件(无论是在 VBA 中,也不是手动,也不是因为操作系统会拒绝您)。如果需要引号的代码位是您的,我强烈建议您更改它。
-
它通过包含引号将文件转换为 .ail2 文件。问题是如果我不遵循这种方法,格式就会被破坏,其他软件将无法正确读取。看我上面的照片...
-
当然可以直接保存为.ail2。如果 .ail2 是您的文件的预期扩展名,这实际上就是您应该做的。