Access中DoCmd.TransferText导出失败:引擎找不到对象
解决Access导出TXT时"找不到对象"的错误
看起来你遇到的问题根源出在文件名包含非法特殊字符,以及导出逻辑的小疏漏上,咱们一步步拆解解决:
错误原因分析
报错里的'Tk2020181903#txt.'暴露了两个核心问题:
- 文件名里出现了
#号——Windows系统不允许文件名使用#这类特殊字符,同时Access会把#识别为对象引用的分隔符(比如查询里的[字段#1]),所以它误以为你要操作一个叫Tk2020181903#txt的数据库对象,而不是导出到这个文件名的文件。 - 后缀拼接错误:你应该用
.来连接文件名和.txt后缀,而不是#。
另外你的日期格式yyyyddmm可能也不符合常规命名习惯(会生成类似20241805这样的字符串,日在前月在后),如果是想按年-月-日的顺序命名,建议改成yyyyMMdd。
修正后的代码示例
我把你的代码调整成更规范、无错误的版本:
' 生成合规的文件名:前缀+yyyyMMdd格式的日期,无特殊字符 TempName01 = "Tk20" & Format(Date, "yyyyMMdd") ExportPath = DLookup("Export_Path", "OmniDB_system01") ' 使用With块简化FileDialog操作,避免重复调用 With Application.FileDialog(msoFileDialogSaveAs) .Title = "Export Tk20 File7 (Testing)" ' 拼接完整的初始文件名:导出路径+合规文件名+.txt后缀 .InitialFileName = ExportPath & "\" & TempName01 & ".txt" ' 添加文件过滤器,确保用户只能选择TXT格式 .Filter = "Text Files (*.txt)|*.txt" ' 如果用户选择了保存路径,执行导出 If .Show = -1 Then DoCmd.TransferText acExportDelim, , "Tk20F7_agg", .SelectedItems(1), True End If End With
关键注意事项
- 禁用非法文件名字符:永远不要在文件名里用
<,>,:,",/,\,|,?,*,#这些字符,Windows和Access都会对这些字符产生误解。 - 规范日期格式:用
yyyyMMdd(年-月-日)比yyyyddmm更直观,避免后续自己或其他开发者混淆日期顺序。 - 用With块优化代码:重复调用
Application.FileDialog既冗余又容易出错,用With块能让代码更清晰易维护。
内容的提问来源于stack exchange,提问作者DrL
相关产品推荐
相关产品推荐

