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 - 另存为后工作簿的对象会发生啥?的主要内容,如果未能解决你的问题,请参考以下文章