VBA - 另存为后工作簿的对象会发生啥?

Posted

技术标签:

【中文标题】VBA - 另存为后工作簿的对象会发生啥?【英文标题】:VBA - What happens to the Object of a Workbook after Save As?VBA - 另存为后工作簿的对象会发生什么? 【发布时间】:2018-04-23 21:19:48 【问题描述】:

我正在开发一个宏,并且想了解这方面的信息以避免任何错误或崩溃。

场景: 我有一个完成所有处理的文件(宏文件)。我的代码打开一个预先存在的 excel(模板)文件,然后将一些内容写入其中,然后将其另存为特定位置。 对于打开预先存在的文件,我正在使用这个:

Set SOWbk = Workbooks.Open(FileName:=SOFileName, ReadOnly:=True)

为了保存为这个文件,我正在使用这个:

SOWbk.SaveAs FileName:=ThisWorkbook.Path & "\" & TextBox13.Value & "_SO.xlsm", FileFormat:=52

问题: 1. 另存为后,原始文件(模板)是否保持打开状态,我必须关闭它吗? 2、“SOWbk”对象是否自动获取新保存为文件的引用?

我尝试在 Google 和 Stack 上搜索此内容。我没有找到任何帮助。提前谢谢你的帮助!非常感谢。

【问题讨论】:

【参考方案1】:

问题 1 的答案:SaveAs 之后旧工作簿是否保持打开状态

没有。您打开存储在位置 A 中的工作簿 A。当您使用 SaveAs 函数时,您将打开的工作簿的“当前版本”(与位置 A 中存储的不同)保存到位置 B。现在打开的文件就是文件 B。

问题 2 的答案:Workbook Object 会发生什么

Object 指的是我所说的 Workbook B。解释同上。打开的工作簿不代表位置 A 中存储的内容。

【讨论】:

感谢您的回答!这澄清了我的疑问。最后一个查询:在“另存为”之后,Excel 会自动关闭工作簿 A(从您的示例中),例如 Worbook.close?那个文件是完全关闭的吗? 它并没有“关闭”原始工作簿,而是破坏了 excel 应用程序和存储文件之间的链接,有利于创建指向新创建文件的链接。 想象一下:工作簿A 存储在磁盘上。当您打开文件时,A 的临时副本让我们称之为A' 存储在您的 RAM 中。当您现在SaveAs 时,A' 将作为B 存储到磁盘中。 RAM 中的对象没有改变,但它现在被引用到 B @FloLie 我们是否必须使用 .close 手动关闭文件 A?或者它不再需要它并且不会影响我的代码。 您不必关闭文件。

以上是关于VBA - 另存为后工作簿的对象会发生啥?的主要内容,如果未能解决你的问题,请参考以下文章

在 Excel for Mac 2016 中另存为 CSV

在 Excel VBA 中使用表单另存为位置保存工作表

提示用户打开工作簿并另存为新工作簿

Excel VBA:将工作簿另存为 Word 文档

VBA 如何批量将单元格复制到另一个工作表中

另存为工作簿类的方法失败 - Outlook vba