Excel VBA工作薄 5.3多个工作薄数据汇总2判断文件是否打开

前景提要

要如何处理,很多的人会说可以选择Y,没错这样操作的话,程序是可以继续执行的,但是如果不巧这个文件你刚刚修改了某些数据,如果你这个时候选择了Y,那么不好意思,你之前的所有改动都没有保存,你需要重新做一份新的数据,是不是很烦躁,所以在批量打开工作薄的时候,需要先判断当前工作薄是否已经被打开,如果被打开的话,我们就不要操作再次打开了。听起来似乎是一个判断,没错,今天我们就来看看这个判断要如何来写。

场景模拟

我们还是继续之前模拟的数据来分析,假设我们我们现在已经打开了京东2这个工作薄,并对其中的某些数据进行了修改,我们如果还是继续执行上节的代码的话,就会出现提示文件被打开的提示,如果选择Y会导致我们修改的数据没有报错,如果我们选择N,则会提示程序运行被中断,程序结束

方法分析

判断文件是否被打开,我们来想想如果是我们自己手工操作的话,我们如何判断工作薄是否被打开呢,当然就是看看当前已经打开的工作薄中是否有我们将要打开的工作薄,那么要如何去判断呢?很简单遍历所有已经打开的工作薄,然后读取已经被打开的工作薄,看看其中是否有我们要打开的那个工作薄,我们要判断天猫1的工作薄是否被打开,那么我们就遍历读取当前被打开的工作薄,看看他们的名字是否有叫做天猫1的,如果有,我们就不能再次执行打开的操作了,需要跳过打开的命令,直接读取数据,反之如果有没有天猫1的工作薄,我们既可以正常的打开操作了,来看下例子。

代码区

假设我们现在已经提前打开了京东2这个工作薄,并且更改了数据,但是还没有保存,我们执行下汇总程序

有报错,我们在调整下代码

Sub test()Dim pathn, sth As Workbookpathn = ThisWorkbook.Pathf = Dir(pathn & "\")Do While f <> "" If f <> "test.xlsm" Then For Each sth In Workbooks If sth.Name = f Then GoTo line End If Next sth Workbooks.Open (pathn & "\" & f) End Ifline: f = Dir()LoopEnd Sub

看看效果,在我们已经提前打开京东2这个工作薄的情况下,程序依然能够正常的运行,并且打开其他的工作薄,这样切好也满足了我们的要求,很完美,这里如果可以上传动画的话,效果应该会更加的明显,可以好像无法上传动画,那么脑海中恶补下这个过程吧

代码解析

For Each sth In Workbooks If sth.Name = f Then GoTo line End If Next sth

这里是遍历所有已经被打开的工作薄的意思,For Each sth In Workbooks就是这个目的

然后读取每个工作薄的名字,如果发现这个工作薄的名字正好和我们将要打开的工作薄的名字是相同的,那么就跳转去执行其他的代码,这里的goto line就是这样的意思,调准到line这一行

继续从这一行开始执行新的命令,新的命令就是继续准备打开下一个工作薄,当前已经被我们提前打开的工作薄京东2将会被关闭,也不会被再次打开,所以我们所作的数据操作也不会丢失了。我们来调试下,方便大家理解下程序执行的过程

当循环遍历的时候,如果碰到工作薄的名字等于我们要打开的工作薄的时候,我们看,程序不会执行打开的命令, 反而去执行调准的命令了。

大家领悟到了嘛?

(0)

相关推荐