VBA Excel:如何处理已打开的文件?

时间:2019-04-28 08:49:07

标签: excel vba error-handling

我的代码在做什么:我有六个主文件。这些主文件中的每一个都有六张纸,每个季度的数据都被复制到该纸中-每张纸具有与数据来源不同的源文件。因此,对于已经打开的工作簿而言,可能会发生两件事:一个主文件已打开,或者一个源文件已打开。

我可能对此有过多的思考,但是到目前为止,这是我的想法:


主文件

每个主文件都另存为“ masterfileDivisionX”(X =不同的分区名称)。我为每个循环使用a来遍历每个循环。在我的代码更改任何内容之前,它将保存为“ masterfileDivisionX_old”,然后遍历代码,并在每个循环结束时再次将其保存为“ masterfileDivisionX”,从而覆盖旧文件。那我该怎么办?

我认为最优雅的事情可能是显示一个MsgBox,说“请关闭文件”。如果我想让用户在“确定”,“取消”和“保存时间戳”之间进行选择,我需要一个用户表格,对吗?两个问题:

  • 如果用户单击“确定”,我将不得不再次检查文件是否确实已关闭-我是否在此处使用GoTo命令返回到整个检查过程的顶部?还是将其放在单独的子功能中,然后直接从内部调用它?

  • 如果用户选择“取消”并退出子目录,则可能剩下一些已更新的主文件,而有些则没有,因为它们在完成每个主文件的循环后都被保存了。在再次执行子程序之前,我需要每个文件都处于旧状态,即未更新。最简单的方法是什么?我是否应该不在循环的每次迭代之后保存文件,而是将其打开并仅在子程序末尾保存所有文件?

源文件

我没有更改源文件中的任何内容,因此这里唯一需要担心的是有人正在编辑文件,而我的代码没有使用最新或正确的数据。我猜这里有“取消”和“仍然继续”的选项吗?

在本地PC上打开的文件与其他用户打开的文件

基于谁打开文件,Windows / VBA的反应是否不同?还是一样,无论我是在PC上打开文件还是在另一台计算机上打开同事的文件?


好吧,所以只写出来就可以帮助我整理思路,并提出UserForm解决方案。如果有人提供一些意见,我将不胜感激,因为这是我第一次做这样的事情(=为其他人编码)。

0 个答案:

没有答案