情況一:單文件多工作表合并,即在一張工作薄中,有多個(gè)工作表格,每個(gè)表格的內容都一致,只是所屬的類(lèi)別不同?,F在要將所有類(lèi)別表格里的內容全部合并到一張工作表格里。如以下表格(諾基亞零配件清單),一共有200多種型號,每種型號一個(gè)清單,現在要將它們全部合并到一張工作表格里。
解決方案:插入一張工作表格,命名為“匯總”。按Alt+F11,進(jìn)入VBA編輯器,寫(xiě)上如下代碼:
04 | Private beginRowNo As Long |
07 | Private Sub CommandButton1_Click() |
08 | Dim sheetCount As Integer |
09 | sheetCount = ThisWorkbook.Worksheets.Count |
14 | For i = 1 To sheetCount |
15 | Dim sheetName As String |
16 | sheetName = ThisWorkbook.Worksheets(i).Name |
18 | Select Case LCase(sheetName) |
20 | MsgBox "跳過(guò) " + sheetName |
22 | MsgBox "跳過(guò) " + sheetName |
24 | MsgBox "跳過(guò) " + sheetName |
26 | DoSubtotal (sheetName) |
32 | Private Sub DoSubtotal(ByVal sheetName As String) |
33 | Dim sourceSheet As Worksheet |
34 | Dim destSheet As Worksheet |
36 | Set sourceSheet = ThisWorkbook.Worksheets(sheetName) |
37 | Set destSheet = ThisWorkbook.Worksheets("匯總") |
39 | sourceSheet.UsedRange.Copy |
40 | destSheet.Range("A" & beginRowNo).PasteSpecial xlPasteValues, xlPasteSpecialOperationNone, True |
41 | beginRowNo = beginRowNo + sourceSheet.UsedRange.Rows.Count |
43 | Set sourceSheet = Nothing |
44 | Set destSheet = Nothing |
然后,將光標放置在 CommandButton1_Click 過(guò)程中的任意位置,按F5運行即可。
情況二:多文件合并,即在一個(gè)文件夾里,有多個(gè)工作薄文件,它們的第一個(gè)表格里的內容形式都一樣,現在要將它們全部合并到一個(gè)工作薄里。如一個(gè)文件夾內,有每天的訂單Excel文件,現在要將全部訂單數據合并到一個(gè)Excel文件內。
解決方案:新建一個(gè)Excel工作薄,按Alt+F11,進(jìn)入VBA編輯器,輸入如下代碼:
05 | On Error GoTo ErrHandler |
06 | Application.ScreenUpdating = False |
08 | FilesToOpen = Application.GetOpenFilename _ |
09 | (FileFilter:="Microsoft Excel Files (*.xls), *.xls", _ |
10 | MultiSelect:=True, Title:="Files to Merge") |
12 | If TypeName(FilesToOpen) = "Boolean" Then |
13 | MsgBox "No Files were selected" |
18 | Dim currentWorkSheet As Worksheet |
20 | Set currentWorkSheet = ActiveWorkbook.ActiveSheet |
21 | Set rng = currentWorkSheet.Range("A1") |
25 | While x <= UBound(FilesToOpen) |
26 | Set wkb = Workbooks.Open(Filename:=FilesToOpen(x)) |
27 | Set wks = wkb.Worksheets(1) |
29 | rng.Offset(0, 10).Value = wkb.Name |
31 | wks.UsedRange.Copy rng |
33 | Set rng = rng.Offset(wks.UsedRange.Rows.Count, 0) |
41 | Set currentWorkSheet = Nothing |
44 | Application.ScreenUpdating = True |
48 | MsgBox Err.Description |
將光標放在過(guò)程“合并工作薄”的任意位置,按F5運行,在彈出的打開(kāi)文件框中,選擇需要合并的全部文件,確定即可。
情況三:多文件合并。類(lèi)似情況二,但是,只將多個(gè)工作薄里的工作表復制到同一個(gè)工作薄里,不需要到同一個(gè)工作表。
解決方案:類(lèi)似情況二,代碼只有一點(diǎn)點(diǎn)區別:
05 | On Error GoTo ErrHandler |
06 | Application.ScreenUpdating = False |
08 | FilesToOpen = Application.GetOpenFilename _ |
09 | (FileFilter:="Microsoft Excel Files (*.xls), *.xls", _ |
10 | MultiSelect:=True, Title:="Files to Merge") |
12 | If TypeName(FilesToOpen) = "Boolean" Then |
13 | MsgBox "No Files were selected" |
19 | While x <= UBound(FilesToOpen) |
20 | Workbooks.Open Filename:=FilesToOpen(x) |
22 | Sheets().Move After:=ThisWorkbook.Sheets _ |
23 | (ThisWorkbook.Sheets.Count) |
29 | Application.ScreenUpdating = True |
33 | MsgBox Err.Description |
注:如果先做情況三,再做情況一,那么就等于情況二。