【发布时间】:2019-03-14 18:45:36
【问题描述】:
我想将 ActiveWorkbook 中的工作表复制到新建工作簿。 新创建的工作簿将包含复制的工作表ONLY。
我也不希望它在复制工作表时打开。我想将工作表静默复制到新创建的工作簿中。
如果我执行以下操作,则新创建的书有 3 张,而不仅仅是一张,并且在复印时会打开。它还问我是否想用宏保存它,而我只想复制 sheet1,所以不需要任何宏,如何解决它以满足我的需要?
ThisWorkbook.Sheets("Sheet1").Copy
ActiveWorkbook.SaveAs "C:\DestinationWb.xlsx", FileFormat:=51
【问题讨论】:
-
Sheet1是否有 VBA 代码隐藏?如果是这样,文档模块(即相应的 VBA 项目组件)将与 Excel 工作表一起复制;如果您需要该代码,您想要的FileFormat是xlOpenXMLWorkbookMacroEnabled;51是xlOpenXMLWorkbook的基础值。我怀疑这可能是 Excel 一开始就警告使用宏保存它的原因。 -
不,它不是,它只是一个表格,其中的文本在某些单元格等中使用颜色和日期格式格式化……但后面没有 vba。
-
为什么不保持打开并提示是否关闭呢?它已经存在了,如果您要重新打开同一个文件,则无需关闭它...
-
Worksheet.Copy创建新的目标工作簿并激活该工作簿 - 没有可打开的内容,如果您复制了工作表,无论您是否愿意,目标工作簿都将被打开......仍然可以关闭它只是为了提示用户是否要打开它是没有意义的。您正在与Worksheet.Copy的副作用作斗争,这些副作用甚至允许您关闭创建的工作簿... -
查看documentation,并注意您可以使用VBA 中的Excel 对象模型与之交互的
Workbook对象只能作为Application.Workbooks集合的元素存在:如果它是没有“打开”,就VBA而言它不存在。您可以想象使用 OpenXML 在没有 Excel 对象模型的情况下从头开始创建文件,但是由于您使用的是 VBA 并且您已经托管在 Excel 中,这样做没有什么意义,并且大大复杂化了应该是相当简单的事情.