如何修复从 Access 保存 xlsx 文件时的“错误 1004”?

How can I fix 'Error 1004' when saving xlsx files from Access?

提问人:AzureSkye 提问时间:9/14/2023 更新时间:9/14/2023 访问量:36

问:

我有一个简单的脚本,但不知道为什么它不起作用。

每次运行它时,我都会收到运行时错误 1004,“无法访问文件”。突破:

wb.SaveAs Filename:=strFilePath, FileFormat:=xlWorkbookDefault

我正在尝试覆盖原始文件,因为我需要先更正它的内部格式,然后才能将其导入 Access。尝试导入的 *.xlsx 文件缺少 docProp 文件夹。可悲的是,我无法控制生成它们的系统,所以我无法解决这个问题。

完整脚本:

Sub ReformatXLSX(strFilePath)

  Dim appExcel As Excel.Application
  Dim wb As Excel.Workbook

  Set appExcel = New Excel.Application
  Set wb = appExcel.Workbooks.Open(strFilePath)

  wb.SaveAs Filename:=strFilePath, FileFormat:=xlWorkbookDefault
  wb.Close
  Set appExcel = Nothing
End Sub

或者,如果有人知道如何在没有 TransferSpreadsheet 的情况下导入文件,我很想尝试一下。

Excel VBA MS-Access

评论


答:

1赞 taller 9/14/2023 #1

根本原因是无法覆盖文件。SaveAs

可以使用代码片段进行小的改进。但这并不能解决问题。 该代码使用 Access VBA 运行。请将 Excel VBA const 更改为其值 (51) 或 。xlWorkbookDefaultExcel.xlWorkbookDefault

wb.SaveAs Filename:=strFilePath, FileFormat:=51

您可以使用Excel VBA即时窗口获取该值。

? xlWorkbookDefault
51

Microsoft 参考文档:

XlFileFormat 枚举 (Excel)

评论

0赞 AzureSkye 9/14/2023
刚刚试过了。不幸的是,我仍然遇到同样的错误。:(
1赞 taller 9/14/2023
wb.SaveAs Filename:=strFilePath不能使用相同的文件名另存为。为什么不直接使用?你要改变Excel文件格式吗?例如,将 XLS 转换为 XLSXwb.Save
2赞 FunThomas 9/14/2023
@taller_ExcelHome:你的最后一条评论(“你不能另存为...”)是这个问题的真正答案,你应该把它写进你的答案中。
0赞 AzureSkye 9/14/2023
这是更正答案:SaveAs 无法覆盖文件。我没想到 Save 可以工作并修复丢失的 docProps,但它确实做到了。谢谢!(请编辑您的答案,以便我将其标记为正确:))