我想使用vba从Access数据库中将查询导出为文本文件。问题是我需要将其保存为.ail2。
基本上,我希望它采用以下形式:“ currentdate_version.ail2” .txt (引号非常重要,否则它将无法正常工作)。
例如,今天的第一个版本看起来像:
“ 20182910_1.ail2” .txt
我尝试手动将其导出并保存为该格式,但是导出向导似乎不喜欢所保存名称中的引号。因此,我一直在导出它(使用标记为test1的自定义保存的导出-它包括每列的标题,将文本限定符设置为“ none”,字段定界符设置为“ tab”,文件格式为“定界” )。
我在访问中使用以下代码,第一部分只是确保具有当前日期的文件夹存在。
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_
相反...
答案 0 :(得分:1)
这里有些误解。
Windows文件名不能包含双引号"
(句号)。而且您也不需要它们。只需将文件另存为filename.ail2
。
这是在执行“另存为”时得到的。 Tell Explorer to show file extensions,您会发现自己没有"filename.ail2".txt
,但是没有filename.ail2
。
您只需要
myExportFileName = sFolderPath & "\" & strSheets & "_" & i & ".ail2"
即使已保存test1 ,也不会被提取。
DoCmd.TransferText
不使用保存的导出,而是使用导出规范。看到这里的区别:
Can I programmatically get at all Import/Export Specs in MS Access 2010?
DoCmd.TransferText
在使用非法文件名时可能会引发运行时错误,但显然它试图通过用_
交换非法字符来节省时间,因此_20181029_1#ail2_ (.txt)
答案 1 :(得分:1)
一种解决方法是,首先使用DoCmd.TransferText
将文件另存为.txt,然后运行shell并重命名。像这样:
myExportFileName = sFolderPath & "\" & strSheets & "_" & i & ".txt"
DoCmd.TransferText TransferType:=acExportDelim, SpecificationName:="034_AILFILE Export Specification", TableName:=myQueryName, filename:=myExportFileName, HasFieldnames:=True
Set wshShell = CreateObject("Wscript.Shell")
strDocuments = wshShell.SpecialFolders("M:\AIL2Files\" & strSheets & "")
oldFileName = myExportFileName
newFileName = sFolderPath & "\" & strSheets & "_" & i & ".ail2"
Name oldFileName As newFileName
毫无疑问,这样做有更简洁的方法,但是我想这种方法可以用来保存任何具有非传统扩展名但从根本上遵循.txt文件格式的文件。