VBA設計之多文件自動合併

根據王佩豐老師的VBA課程第十四課,設計了多文件合併系統,可以一鍵合併多個工作簿里的數據到一個工作簿中。視頻如下,VBA代碼在最後。請各位朋友指正。

https://www.zhihu.com/video/1050069010217021440


VBA代碼和解釋如下:

數據合併的代碼

Sub hebing() 定義一個過程叫 hebing(合併)

Dim arr() 定義一個帶括弧的變數arr,帶括弧的意思就是這個變數是一個可以包含多個數字的數組

Dim i As Integer 定義一個整數變數i

Dim wb, wb1 As Workbook 定義wb,wb1是Excel的工作簿(wb來源自工作簿的英文單詞workbook首字母)

Dim sht As Worksheet 定義sht是Excel工作表(sht來源自worksheet首字母)

On Error Resume Next 如果點了取消發生了錯誤,錯誤跳過

Set wb1 = ActiveWorkbook 讓wb1是當前被激活的工作簿

Set sht1 = ActiveSheet 讓sht1是當前被激活的工作表

On Error Resume Next 如果點了取消發生了錯誤,錯誤跳過

arr = Application.GetOpenFilename("Excel數據文件,*.xls*", , , , True)

利用特殊的GetOpenFilename函數,創建一個打開文件的對話框,括弧內是函數的參數設置,即只能打開後綴包含xls的Excel文件等(可百度學習);選擇了要打開的Excel文件,那麼文件的名字就通過這個函數賦予給了變數str,此時str是一個數組,包括了所有選中文件的路徑和文件名。

For i = LBound(arr) To UBound(arr)

這時候的問題是要逐個粘貼了,那麼我們選了幾個文件,arr里就有幾個數據路徑加文件名。此時,如果我們選中的是5個Excel工作簿文件合併,那麼i的值就會是0,1,2,3,4,這裡就是LBound函數和UBound函數的取值特點。進行For循環,讓變數i從str的下標循環到上標;也就是說要把所有要合併的Excel工作簿文件,通過循環逐個拷貝粘貼。

Set wb = Workbooks.Open(arr(i)) 如i=0,則打開第一個選中的工作簿文件,並且賦予給定義好的叫wb的工作簿。那麼這時候要合併粘貼的工作簿,就是wb。wb相當於循環中的一個殼子。

For Each sht In wb.Sheets 對於wb工作簿的每一個工作表

sht.Copy after:=wb1.Sheets(wb1.Sheets.Count) 拷貝到wb1工作簿的最後一個工作表的後面

wb1.Sheets(wb1.Sheets.Count).Name = Split(wb.Name, ".")(0) & sht.Name 新拷貝到wb1工作簿的這張表的名字還是叫wb工作簿里的名字,用到spilt函數。

Next

wb.Close 關閉這個wb

Next 循環下一個i,即打開下一個要複製的工作簿

Sheet1.Select 工作全部結束,頁面要回到sheet1.

End Sub

數據刪除

Sub shanchu() 定義刪除的過程

For i = Worksheets.Count To 2 Step -1 數一數最後一張表是第幾張表,然後從這個數值循環到2,每一步步長是-1。從後面往前刪,可以避免一些問題。這個要思考思考。

Worksheets(i).Delete 刪除選擇的這個表i

Next 循環,直到刪除了sheet2,只剩下sheet1。

End Sub


推薦閱讀:

TAG:MicrosoftExcel | VBA |