EXCEL——VBA實(shí)現(xiàn)將多個(gè)文件的sheet匯總到一個(gè)workbook中去

mammals-3218028_640.jpg

在日常生活中,經(jīng)常會(huì)遇到一個(gè)文件夾中有很多個(gè)工作簿,這個(gè)時(shí)候需要把這些工作簿中的sheet全部匯總到一個(gè)工作簿中,應(yīng)該如何做呢?如果一個(gè)一個(gè)打開然后將sheet復(fù)制粘貼,未免太沒有效率了,這個(gè)時(shí)候我們通過VBA來解決這個(gè)問題,只需要執(zhí)行代碼,所有sheet會(huì)自動(dòng)匯總到一個(gè)工作簿中。

image.png

如圖,我們需要將圖中所有的工作簿中的sheet全部匯總到11.xlsm這個(gè)工作簿中,這個(gè)時(shí)候我們應(yīng)該要在11.xlsm中執(zhí)行代碼。老規(guī)矩,首先我們來分析一下代碼,如下:

Sub 將多個(gè)文件的sheet匯總()
    Dim i
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    flnm = Dir(ThisWorkbook.Path & "\*.xlsm")
    Do While flnm <> ""
        Debug.Print ThisWorkbook.Path & "\" & flnm
        fn = ThisWorkbook.Path & "\" & flnm
        If flnm <> "11.xlsm" Then
            Debug.Print TypeName(flnm); 查看一下數(shù)據(jù)類型
            Set wb = Workbooks.Open(fn)
                For Each x In wb.Sheets
                    x.Name = Split(flnm, ".")(0)
                    x.UsedRange.Copy
                    ThisWorkbook.Worksheets.Add(after:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)).Name = Split(flnm, ".")(0)
                    ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count).Paste
                Next
        End If
        flnm = Dir
    Loop
End Sub

上述代碼中,前兩行
Application.ScreenUpdating = False
Application.DisplayAlerts = False
是為了加快運(yùn)行速度,暫停表格刷新和禁止彈出框。

flnm = Dir(ThisWorkbook.Path & "\*.xlsm")
    Do While flnm <> ""
        Debug.Print ThisWorkbook.Path & "\" & flnm
        fn = ThisWorkbook.Path & "\" & flnm
        If flnm <> "11.xlsm" Then
        ...
        End If
        flnm = Dir
    Loop

上面這幾句代碼是對(duì)這個(gè)工作簿路徑下的xlsm文件進(jìn)行遍歷,然后當(dāng)flnm <> 11.xlsm時(shí)執(zhí)行下面的代碼

Debug.Print TypeName(flnm); 查看一下數(shù)據(jù)類型
            Set wb = Workbooks.Open(fn)
            For Each x In wb.Sheets
                    x.Name = Split(flnm, ".")(0)
                    x.UsedRange.Copy
                    ThisWorkbook.Worksheets.Add(after:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)).Name = Split(flnm, ".")(0)
                    ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count).Paste
            Next

即是對(duì)工作簿中的sheet進(jìn)行遍歷、改名、并將內(nèi)容復(fù)制給11.xlsm新創(chuàng)建的sheet。。
這樣對(duì)整個(gè)文件夾下的xlsm文件遍歷一遍過后,就能把所有的sheet都匯總到11.xlsm中:


3月-21-2018 22-07-22.gif

是不是很強(qiáng)大~
希望對(duì)大家有所幫助哦,記得點(diǎn)個(gè)贊哦^^

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

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

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