多个 TransferSpreadsheet 命令导致在打开时选择所有创建的工作表

Posted

技术标签:

【中文标题】多个 TransferSpreadsheet 命令导致在打开时选择所有创建的工作表【英文标题】:Multiple TransferSpreadsheet commands results in all created sheets being selected when opened 【发布时间】:2021-09-23 11:41:52 【问题描述】:

有点难以用语言解释,但在这种情况下,代码和屏幕截图应该真的很有帮助。 我创建了这段简单的代码来重现这个问题。此代码是在 Access 2013 的 VBA 模块中创建的。

它用 4 张表格创建两个相等的 excel,一个是 acSpreadsheetTypeExcel9 / xls 格式,另一个是 acSpreadsheetTypeExcel12XML / xlsx。

Function TestExportExcel()

s = "\xxx\Desktop\temp\test.xls"

        DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "tblPLCselect", s, , "sheet 1"
        DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "tblPLCselect", s, , "sheet 2"
        DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "tblPLCselect", s, , "sheet 3"
        DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "tblPLCselect", s, , "sheet 4"

s = "\xxx\Desktop\temp\test.xlsx"

        DoCmd.TransferSpreadsheet acExport, , "tblPLCselect", s, , "sheet 1"
        DoCmd.TransferSpreadsheet acExport, , "tblPLCselect", s, , "sheet 2"
        DoCmd.TransferSpreadsheet acExport, , "tblPLCselect", s, , "sheet 3"
        DoCmd.TransferSpreadsheet acExport, , "tblPLCselect", s, , "sheet 4"

End Function

这里的功能问题是在第二个 (xlsx) 导出中选择了所有工作表,这与 xls 版本相矛盾:

我希望用户打开工作表时只选择第一个工作表,但我也想以 acSpreadsheetTypeExcel12XML / xlsx 格式导出。

有没有一种有效的方式(这个导出必须经常运行)来操纵它?

【问题讨论】:

【参考方案1】:

奇怪!是的,我得到同样的行为。我认为修复的唯一方法是使用 Excel 自动化。

Dim objExcel As Object, wb As Object
Set objExcel = CreateObject("Excel.Application")
Set wb = objExcel.Workbooks.Open(s)
wb.Worksheets("sheet_2").Activate
wb.Worksheets("sheet_1").Activate
wb.Save
objExcel.Quit

Excel 会将工作表名称中的空格替换为下划线字符。

【讨论】:

谢谢@june7。唯一的问题是我必须做大量的出口。您建议的解决方案意味着打开、保存和关闭每个 Excel。这不是很有效。但恐怕这是唯一的办法? 是的,但代码会自动完成此操作,用户甚至不知道它正在发生。它很快。正如我所说,我没有看到任何其他方式。 更正,我的简单的小 Excel 文件很快。包含大量数据的工作簿可能会降低性能。 明天我将与基准进行比较,看看它的表现如何,谢谢! 附言。我添加了 wb.Close SaveChanges:=True 以避免收到保存提示。

以上是关于多个 TransferSpreadsheet 命令导致在打开时选择所有创建的工作表的主要内容,如果未能解决你的问题,请参考以下文章

使用 TransferSpreadsheet 导入 Excel 电子表格时出错

使用 vba TransferSpreadsheet 将 Aaccess 表与 Excel 链接

TransferText 导出到 CSV 不工作,但 TransferSpreadsheet 到 XLSX 工作

MS ACCESS TransferSpreadsheet VBA 在导入数据中包含额外信息

打开多个 Excel 实例时如何通过 Excel 宏将数据从 Excel 导出到 Access

导入规范访问 vba