VBA - Save As后Workbook对象会发生什么变化?

3

我正在处理一个宏,想要了解这个问题以避免任何错误或崩溃。

场景: 我有一个文件用于所有的处理(宏文件)。我的代码打开一个预先存在的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个回答

3

问题1的答案:使用SaveAs后,旧工作簿不会保持打开状态。

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

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

该对象指的是我所说的Workbook B。解释与上述相同。打开的工作簿不是存储在位置A中的内容的表示。

enter image description here


谢谢您的答复!这解决了我的疑惑。最后一个问题:在“另存为”之后,Excel会自动关闭工作簿A(从您的例子中),就像工作簿.close一样吗?那个文件是完全关闭了吗? - Sandeepr
2
它并不是“关闭”原始工作簿,而是打破了Excel应用程序与存储文件之间的链接,以便创建到新创建文件的链接。 - user4039065
想象一下:工作簿 A 存储在磁盘上。当您打开文件时,A 的临时副本(我们称之为 A')存储在 RAM 中。当您现在执行“另存为”操作时,A' 会被存储到磁盘上并命名为 B。RAM 中的对象不会改变,但现在它引用了 B - FloLie
@FloLie 我们需要手动使用 .close 关闭文件 A 吗?还是说现在不需要了,不关闭也不会影响我的代码? - Sandeepr
您不必关闭文件。 - FloLie
感谢您的答案和图形解释。非常感激! :) - Sandeepr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接