【发布时间】:2019-08-03 05:00:51
【问题描述】:
我正在尝试在 MS Access 2016 中使用 VBA 设置一个宏,以将多个 .xls 文件导入我的表中。
我能够在其中 13 个文件上运行此宏,但在第 13 个文件之后,剩余的每个文件都会抛出“运行时错误 '3274':外部表不是预期格式。” DoCmd.TransferSpreadsheet 行上的错误:
Function ImportAllExcel()
Dim myfile
Dim mypath
Dim finpath
mypath = REDACTED
finpath = REDACTED
ChDir (mypath)
myfile = Dir(mypath)
Do While myfile <> ""
If myfile Like "*.xls" Then
DoCmd.TransferSpreadsheet acImport, 8, _
"Table Name", mypath & myfile, True
' Move imported files to Imported folder
FileCopy mypath & "/" & myfile, finpath & "/" & myfile
SetAttr mypath & "/" & myfile, vbNormal
Kill mypath & "/" & myfile
End If
myfile = Dir()
Loop
MsgBox "Import complete."
End Function
我尝试了其他帖子中的几个“修复”,但均未成功:
- 将 SpreadsheetType 更改为任何其他值(包括空白、数字和所有版本的 acSpreadsheetTypeExcel)
- 打开文件并在打开时运行宏
- 打开文件并将其重新保存为 .xls
- 使用其他名称打开文件并将其另存为 .xls
- 在尝试 TransferSpreadsheet 之前将 Attr 设置为 vbNormal
所有列名都不包含任何空格(尽管一个包含下划线并且根本不导入已成功运行的列,但这是一个单独的问题 - 我手动将列添加到 Access 表中case 但它没有数据条目)。
所有 .xls 文件都来自相同的来源、相同的格式、相同的列名和数据类型 - 它们是来自机器源的自动每日报告。前 13 个文件导入得很好,我发现运行的文件和剩余的文件之间没有明显的区别。
谁能帮我理解这个宏发生了什么以及如何修复它?
编辑添加:我在我的表中添加了一个索引以防止重复条目,这大大减少了导入记录的数量,但它仍然停止处理完全相同的文件。在宏不会处理的文件之一上手动运行导入向导可以正常工作,但我有大量文件要导入,并且希望避免一个接一个地手动导入。
【问题讨论】:
-
工作表是否包含隐藏列?除了简单的值表之外,其中是否还有其他内容或功能?
-
如果在运行例程之前删除导入的 13,例程是否会再导入 13 并失败?如果不是,那么第 14 个文件中肯定有与第一个文件不同的内容。检查电子表格的使用范围是否过多(控制端应该带您到工作表的最后一个填充单元格)
-
@AndyG 没有隐藏列,它是从现有数据库导出的基本原始数据。所有字段的数据类型都是短文本(一个长文本列除外)。
-
@HarassedDad 删除前 13 个文件后,其他文件都不会运行。每个文件包含大约 3500 行,给或取。初始13导入成功后,表中有48225条记录。
标签: excel ms-access vba ms-access-2016