Excel VBA工作薄 5.4 批量匯總工作薄之隨手關(guān)閉工作薄

前景提要

上一節(jié)玉转,我們學(xué)習(xí)了在進(jìn)行批量工作薄匯總的過程中芍耘,碰到工作薄已經(jīng)被打開的情況要如何處理凤壁,其實(shí)按照正常的邏輯來說,在進(jìn)行批量工作薄匯總之前膘掰,應(yīng)該首先確保所有的工作薄都已經(jīng)關(guān)閉畢竟相應(yīng)的數(shù)據(jù)已經(jīng)做好了保存章姓,這是最基本的一點(diǎn)要求佳遣,但是有時(shí)候忙碌的時(shí)候難免會(huì)導(dǎo)致疏忽或者遺漏的情況,如果不做判斷的話凡伊,可能會(huì)導(dǎo)致花費(fèi)了一個(gè)小時(shí)更新的數(shù)據(jù)都沒有了零渐,所以為了腳本的完整和通用性,我們還是要坐下判斷比較好

今天我們來繼續(xù)學(xué)習(xí)批量匯總工作薄的操作系忙,在昨天的學(xué)習(xí)之后诵盼,有童鞋私下找我說,他們要匯總的工作薄有很多银还,經(jīng)常都是幾十個(gè)风宁,在上節(jié)的學(xué)習(xí)上,我們說過要遍歷所有被打開的工作薄蛹疯,從而得出我們將要打開的工作薄是否已經(jīng)被打開戒财,但是幾十個(gè)工作薄的循環(huán)會(huì)不會(huì)導(dǎo)致系統(tǒng)奔潰呢?同時(shí)一次性打開那么多的窗口捺弦,對(duì)于電腦的內(nèi)存的損耗會(huì)不會(huì)很大呢饮寞?看來這些童鞋都會(huì)經(jīng)常處理大數(shù)據(jù)的童鞋,經(jīng)驗(yàn)非常的豐富列吼,沒錯(cuò)幽崩,如果按照我們之前的代碼來操作的話,確實(shí)會(huì)出現(xiàn)大家所擔(dān)心的問題冈欢,那么怎么辦呢歉铝?好,今天我們繼續(xù)完善代碼

方法分析

其實(shí)方法還是一樣的凑耻,不過我們換一個(gè)思路太示,既然我們知道同時(shí)打開太多的工作薄的話,會(huì)導(dǎo)致電腦卡死香浩,而且在遍歷已經(jīng)打開的工作薄的過程中类缤,也會(huì)拖累腳本的處理速度,那么我們?yōu)槭裁丛谟猛炅藬?shù)據(jù)之后及時(shí)關(guān)閉工作薄呢邻吭,打開一個(gè)關(guān)閉一個(gè)餐弱,那么最終已經(jīng)開始的工作薄不就只有僅僅幾個(gè)而已嘛,僅僅幾個(gè)工作薄肯定不會(huì)造成電腦的死機(jī)囱晴,除非你的數(shù)據(jù)非常的大膏蚓,太大的數(shù)據(jù)的話,確實(shí)不太適合用excel來處理了畸写,建議用其他的大數(shù)據(jù)軟件或者acces ,power query之類的軟件驮瞧,小編最近也在接觸這些軟件有學(xué)習(xí)的朋友大家可以一起交流下。

回歸正題枯芬,那么如何關(guān)閉我們正在打開的工作薄呢论笔?前面有一個(gè)workbooks.open,那么關(guān)閉是不是就是workbooks.close 呢采郎?是的,所以今天我們就用workbooks.close來執(zhí)行工作薄的關(guān)閉

場(chǎng)景模擬

我們還是繼續(xù)使用我們之前的場(chǎng)景

image.png

代碼區(qū)

我們 先不寫匯總數(shù)據(jù)的代碼狂魔,我們先執(zhí)行打開并關(guān)閉的代碼

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)

        '=====匯總工作薄的代碼======

        '****************************

        '=====匯總工作薄的代碼======

        ActiveWorkbook.Close

    End If

line:

    f = Dir()

Loop

End Sub

我們來看看效果蒜埋,這樣一來程序執(zhí)行完之后,真正打開的文件只有兩個(gè)最楷,我們要匯總的總表以及一個(gè)代碼窗口而已整份,相遇于上節(jié)一次打開N多個(gè)工作薄,感覺是不是舒暢了很多管嬉,對(duì)于有強(qiáng)迫癥的童鞋來說皂林,也是一種結(jié)果朗鸠,我們來看看前后的效果對(duì)于


image.png
image.png

非常的完美

為了考慮代碼的通用性蚯撩,我們?cè)谠黾右粋€(gè)意外因素,假設(shè)未來某一天我們要執(zhí)行的操作并不僅僅是合并匯總數(shù)據(jù)烛占,同時(shí)還要執(zhí)行數(shù)據(jù)的更改胎挎,我們假設(shè)更改了原始數(shù)據(jù)中的某個(gè)位置,當(dāng)我們?cè)俅卫蒙厦娴拇a關(guān)閉工作薄的時(shí)候忆家,就會(huì)有彈窗了犹菇。


image.png

原來你操作了數(shù)據(jù)的更改之后,沒有及時(shí)保存的話芽卿,如果這個(gè)時(shí)候選擇了關(guān)閉按鈕揭芍,也會(huì)有這樣的報(bào)錯(cuò),這樣的報(bào)錯(cuò)影響就不大了卸例,你可以根據(jù)自己的需要選擇是保存還是不保存称杨,對(duì)于數(shù)據(jù)并沒有任何的影響,但是如果你有幾十個(gè)工作薄筷转,那么你可能要點(diǎn)擊幾十次的保存或者是不保存姑原,你不累嘛?那么這個(gè)時(shí)候要怎么辦呢呜舒?

來锭汛,我們繼續(xù)完善代碼

workbooks.close方法還有一個(gè)參數(shù),是布爾類型的袭蝗,F(xiàn)ALSE 和TRUE兩種選擇唤殴,當(dāng)你在關(guān)閉工作薄的時(shí)候,你可以選擇TRUE將你已經(jīng)修改的數(shù)據(jù)保存并關(guān)閉到腥,也可以選擇FALSE 不保存修改直接關(guān)閉朵逝,通過代碼執(zhí)行選擇,就不用再去我們手工點(diǎn)擊鼠標(biāo)進(jìn)行操作了左电,這樣程序就更加的完美了廉侧。

看看完整代碼

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)

        Cells(1, 10) = 1

        '=====匯總工作薄的代碼======

        '****************************

        '=====匯總工作薄的代碼======

        ActiveWorkbook.Close True

    End If

line:

    f = Dir()

Loop

End Sub

依然有個(gè)小遺憾页响,沒有辦法上傳動(dòng)畫,具體的過程段誊,只能大家在腦海中天馬行空咯闰蚕。

代碼分析

今天的代碼分析直說一個(gè)問題

  ActiveWorkbook.Close True

大家可能注意到了,我這里并沒有直接寫workbooks.close,而是ActiveWorkbook.Close.這兩者的區(qū)別就是ActiveWorkbook代表的是當(dāng)前的活動(dòng)工作薄连舍,就是我們正操作和打開的工作薄没陡,簡(jiǎn)單說就是我們能夠看到的工作薄,舉個(gè)例子

image.png

假設(shè)我們現(xiàn)在同時(shí)打開了N個(gè)工作薄索赏,有名為中國(guó)盼玄,印度等,中國(guó)潜腻,印度的工作薄都可以稱之為workbook埃儿,但是ActiveWorkbook只有當(dāng)前標(biāo)題欄的那個(gè)工作薄才可以說是ActiveWorkbook,就是名為中國(guó)的工作薄才是工作薄融涣,我們要關(guān)閉的話童番,就只會(huì)關(guān)閉這個(gè)工作薄,而不會(huì)因?yàn)椴恍⌒娜リP(guān)閉了其他的工作薄威鹿,導(dǎo)致數(shù)據(jù)的丟失

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末剃斧,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子忽你,更是在濱河造成了極大的恐慌幼东,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件科雳,死亡現(xiàn)場(chǎng)離奇詭異根蟹,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)炸渡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門娜亿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蚌堵,你說我怎么就攤上這事买决。” “怎么了吼畏?”我有些...
    開封第一講書人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵督赤,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我泻蚊,道長(zhǎng)躲舌,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任性雄,我火速辦了婚禮没卸,結(jié)果婚禮上羹奉,老公的妹妹穿的比我還像新娘。我一直安慰自己约计,他們只是感情好诀拭,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著煤蚌,像睡著了一般耕挨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上尉桩,一...
    開封第一講書人閱讀 49,111評(píng)論 1 285
  • 那天筒占,我揣著相機(jī)與錄音,去河邊找鬼蜘犁。 笑死翰苫,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的沽瘦。 我是一名探鬼主播革骨,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼析恋!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起盛卡,我...
    開封第一講書人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤助隧,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后滑沧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體并村,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年滓技,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了哩牍。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡令漂,死狀恐怖膝昆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情叠必,我是刑警寧澤荚孵,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站纬朝,受9級(jí)特大地震影響收叶,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜共苛,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一判没、第九天 我趴在偏房一處隱蔽的房頂上張望蜓萄。 院中可真熱鬧,春花似錦澄峰、人聲如沸绕德。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽耻蛇。三九已至,卻和暖如春胞此,著一層夾襖步出監(jiān)牢的瞬間臣咖,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工漱牵, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留夺蛇,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓酣胀,卻偏偏與公主長(zhǎng)得像刁赦,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子闻镶,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容