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

本文介绍了如何使用VBA在合并Excel工作簿时,避免因文件已打开导致的数据丢失问题。通过遍历已打开的工作簿,判断目标文件是否已被占用,从而决定是否需要打开或跳过。在代码示例中,展示了如何调整代码以确保程序在工作簿已打开时仍能正常运行,同时保护用户的数据不被意外覆盖。
摘要由CSDN通过智能技术生成

前景提要

今天我们接着上次的分享来继续,上次我们分享了在合并多个工作薄的过程中,将文件夹内Excel文件批量打开的操作,今天我们继续完善昨天的代码,在上节我们留下了一个悬念,如果在合并工作薄的过程中,出现了如下的提示

6f9436111b3b56eef635a34638d3563f.png

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

场景模拟

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

50f8dfb5fbce5edee153e310e3842ba4.png

方法分析

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

代码区

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

f9ad7dac0aaaaa1602b720c389b220a7.png

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

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这一行

4568a587875f9d5faaca965585da58f6.png

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

88856fdc2f1d8b4591ff901ffa28a91f.png

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

5520b10622679afd5299b4c2fe893b58.png

大家领悟到了嘛?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值