Excel VBA工作薄 5.3多個工作薄數(shù)據(jù)匯總2判斷文件是否打開

前景提要

今天我們接著上次的分享來繼續(xù),上次我們分享了在合并多個工作薄的過程中,將文件夾內(nèi)Excel文件批量打開的操作,今天我們繼續(xù)完善昨天的代碼,在上節(jié)我們留下了一個懸念,如果在合并工作薄的過程中,出現(xiàn)了如下的提示


image.png

要如何處理,很多的人會說可以選擇Y,沒錯這樣操作的話,程序是可以繼續(xù)執(zhí)行的,但是如果不巧這個文件你剛剛修改了某些數(shù)據(jù),如果你這個時候選擇了Y,那么不好意思,你之前的所有改動都沒有保存,你需要重新做一份新的數(shù)據(jù),是不是很煩躁,所以在批量打開工作薄的時候,需要先判斷當前工作薄是否已經(jīng)被打開,如果被打開的話,我們就不要操作再次打開了。聽起來似乎是一個判斷,沒錯,今天我們就來看看這個判斷要如何來寫。

場景模擬

我們還是繼續(xù)之前模擬的數(shù)據(jù)來分析,假設(shè)我們我們現(xiàn)在已經(jīng)打開了京東2這個工作薄,并對其中的某些數(shù)據(jù)進行了修改,我們?nèi)绻€是繼續(xù)執(zhí)行上節(jié)的代碼的話,就會出現(xiàn)提示文件被打開的提示,如果選擇Y會導(dǎo)致我們修改的數(shù)據(jù)沒有報錯,如果我們選擇N,則會提示程序運行被中斷,程序結(jié)束

image.png

方法分析

判斷文件是否被打開,我們來想想如果是我們自己手工操作的話,我們?nèi)绾闻袛喙ぷ鞅∈欠癖淮蜷_呢,當然就是看看當前已經(jīng)打開的工作薄中是否有我們將要打開的工作薄,那么要如何去判斷呢?很簡單遍歷所有已經(jīng)打開的工作薄,然后讀取已經(jīng)被打開的工作薄,看看其中是否有我們要打開的那個工作薄,我們要判斷天貓1的工作薄是否被打開,那么我們就遍歷讀取當前被打開的工作薄,看看他們的名字是否有叫做天貓1的,如果有,我們就不能再次執(zhí)行打開的操作了,需要跳過打開的命令,直接讀取數(shù)據(jù),反之如果有沒有天貓1的工作薄,我們既可以正常的打開操作了,來看下例子。

代碼區(qū)

假設(shè)我們現(xiàn)在已經(jīng)提前打開了京東2這個工作薄,并且更改了數(shù)據(jù),但是還沒有保存,我們執(zhí)行下匯總程序

image.png

有報錯,我們在調(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這個工作薄的情況下,程序依然能夠正常的運行,并且打開其他的工作薄,這樣切好也滿足了我們的要求,很完美,這里如果可以上傳動畫的話,效果應(yīng)該會更加的明顯,可以好像無法上傳動畫,那么腦海中惡補下這個過程吧

代碼分析

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就是這個目的

然后讀取每個工作薄的名字,如果發(fā)現(xiàn)這個工作薄的名字正好和我們將要打開的工作薄的名字是相同的,那么就跳轉(zhuǎn)去執(zhí)行其他的代碼,這里的goto line就是這樣的意思,調(diào)準到line這一行


image.png

繼續(xù)從這一行開始執(zhí)行新的命令,新的命令就是繼續(xù)準備打開下一個工作薄,當前已經(jīng)被我們提前打開的工作薄京東2將會被關(guān)閉,也不會被再次打開,所以我們所作的數(shù)據(jù)操作也不會丟失了。我們來調(diào)試下,方便大家理解下程序執(zhí)行的過程


image.png

當循環(huán)遍歷的時候,如果碰到工作薄的名字等于我們要打開的工作薄的時候,我們看,程序不會執(zhí)行打開的命令, 反而去執(zhí)行調(diào)準的命令了。

image.png

大家領(lǐng)悟到了嘛?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容