前景提要
今天我們接著上次的分享來繼續(xù),上次我們分享了在合并多個(gè)工作薄的過程中,將文件夾內(nèi)Excel文件批量打開的操作,今天我們繼續(xù)完善昨天的代碼较坛,在上節(jié)我們留下了一個(gè)懸念,如果在合并工作薄的過程中扒最,出現(xiàn)了如下的提示
要如何處理丑勤,很多的人會(huì)說可以選擇Y,沒錯(cuò)這樣操作的話吧趣,程序是可以繼續(xù)執(zhí)行的法竞,但是如果不巧這個(gè)文件你剛剛修改了某些數(shù)據(jù),如果你這個(gè)時(shí)候選擇了Y强挫,那么不好意思岔霸,你之前的所有改動(dòng)都沒有保存,你需要重新做一份新的數(shù)據(jù)俯渤,是不是很煩躁呆细,所以在批量打開工作薄的時(shí)候,需要先判斷當(dāng)前工作薄是否已經(jīng)被打開八匠,如果被打開的話絮爷,我們就不要操作再次打開了。聽起來似乎是一個(gè)判斷梨树,沒錯(cuò)坑夯,今天我們就來看看這個(gè)判斷要如何來寫。
場(chǎng)景模擬
我們還是繼續(xù)之前模擬的數(shù)據(jù)來分析抡四,假設(shè)我們我們現(xiàn)在已經(jīng)打開了京東2這個(gè)工作薄柜蜈,并對(duì)其中的某些數(shù)據(jù)進(jìn)行了修改,我們?nèi)绻€是繼續(xù)執(zhí)行上節(jié)的代碼的話床嫌,就會(huì)出現(xiàn)提示文件被打開的提示跨释,如果選擇Y會(huì)導(dǎo)致我們修改的數(shù)據(jù)沒有報(bào)錯(cuò),如果我們選擇N厌处,則會(huì)提示程序運(yùn)行被中斷鳖谈,程序結(jié)束
方法分析
判斷文件是否被打開,我們來想想如果是我們自己手工操作的話阔涉,我們?nèi)绾闻袛喙ぷ鞅∈欠癖淮蜷_呢缆娃,當(dāng)然就是看看當(dāng)前已經(jīng)打開的工作薄中是否有我們將要打開的工作薄,那么要如何去判斷呢瑰排?很簡(jiǎn)單遍歷所有已經(jīng)打開的工作薄贯要,然后讀取已經(jīng)被打開的工作薄,看看其中是否有我們要打開的那個(gè)工作薄椭住,我們要判斷天貓1的工作薄是否被打開崇渗,那么我們就遍歷讀取當(dāng)前被打開的工作薄,看看他們的名字是否有叫做天貓1的,如果有宅广,我們就不能再次執(zhí)行打開的操作了葫掉,需要跳過打開的命令,直接讀取數(shù)據(jù)跟狱,反之如果有沒有天貓1的工作薄俭厚,我們既可以正常的打開操作了,來看下例子驶臊。
代碼區(qū)
假設(shè)我們現(xiàn)在已經(jīng)提前打開了京東2這個(gè)工作薄挪挤,并且更改了數(shù)據(jù),但是還沒有保存关翎,我們執(zhí)行下匯總程序
有報(bào)錯(cuò)扛门,我們?cè)谡{(diào)整下代碼
Sub test()
Dim pathn, sth As Workbook
pathn = ThisWorkbook.Path
f = 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 If
line:
f = Dir()
Loop
End Sub
看看效果,在我們已經(jīng)提前打開京東2這個(gè)工作薄的情況下笤休,程序依然能夠正常的運(yùn)行尖飞,并且打開其他的工作薄,這樣切好也滿足了我們的要求店雅,很完美政基,這里如果可以上傳動(dòng)畫的話,效果應(yīng)該會(huì)更加的明顯闹啦,可以好像無法上傳動(dòng)畫沮明,那么腦海中惡補(bǔ)下這個(gè)過程吧
代碼分析
For Each sth In Workbooks
If sth.Name = f Then
GoTo line
End If
Next sth
這里是遍歷所有已經(jīng)被打開的工作薄的意思,F(xiàn)or Each sth In Workbooks就是這個(gè)目的
然后讀取每個(gè)工作薄的名字窍奋,如果發(fā)現(xiàn)這個(gè)工作薄的名字正好和我們將要打開的工作薄的名字是相同的荐健,那么就跳轉(zhuǎn)去執(zhí)行其他的代碼,這里的goto line就是這樣的意思琳袄,調(diào)準(zhǔn)到line這一行
繼續(xù)從這一行開始執(zhí)行新的命令江场,新的命令就是繼續(xù)準(zhǔn)備打開下一個(gè)工作薄,當(dāng)前已經(jīng)被我們提前打開的工作薄京東2將會(huì)被關(guān)閉窖逗,也不會(huì)被再次打開址否,所以我們所作的數(shù)據(jù)操作也不會(huì)丟失了。我們來調(diào)試下碎紊,方便大家理解下程序執(zhí)行的過程
當(dāng)循環(huán)遍歷的時(shí)候佑附,如果碰到工作薄的名字等于我們要打開的工作薄的時(shí)候,我們看仗考,程序不會(huì)執(zhí)行打開的命令音同, 反而去執(zhí)行調(diào)準(zhǔn)的命令了。
大家領(lǐng)悟到了嘛秃嗜?