以下程式碼出處是來自於 彰化一整天的blog http://blog.bestdaylong.com/2008/07/excelcopy_31.html
再經過我自身需求的改寫所得出符合我需要的程式碼。
常常工作上可能會遇到需要把很多個同樣格式,但是不同檔案的EXCEL表合併起來,所以要做的動作有兩個:
1. 先把不同檔案
的EXCEL表,每一個檔案裡面的第一個頁籤(worksheet)、工作表
,自動複製到一個檔案
內的不同頁籤
2. 接著再把一個檔案內的不同頁簽的資料再全部合併成同一個頁簽
內即可。
請預先將excel表內的各欄位設計如下,程式碼會自動抓取 G欄位 內各項儲存格的內容,作為參數
以下為第1步驟的程式碼
抓取資料夾檔名
1
2
3
4
5
6
7
8
9
10
11
12
13
| WorkName = Excel.ActiveWorkbook.Name
MsgBox Excel.Workbooks(WorkName).Path
file_path = Excel.Workbooks(WorkName).Path
fs = Dir(file_path & "\*.*")
Do Until fs = ""
r = r + 1
y = 1
Cells(y + r, 2) = fs
fs = Dir
Loop
|
合併EXCEL檔案檔名
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
| Dim objsheet As Worksheet
n = UCase(Range("G2"))
m = UCase(Range("G3"))
x = Range("G4")
WorkName = Excel.ActiveWorkbook.Name '此檔案名稱
Excel.Workbooks.Add '開新的workbook
desc = Excel.ActiveWorkbook.Name '新檔案視窗編號
i = 2
While Windows(WorkName).ActiveSheet.Range("b" & i) <> ""
' Filename = Windows(WorkName).ActiveSheet.Range("b" & i) & ".xlsx"
Filename = Windows(WorkName).ActiveSheet.Range("b" & i) & "." & x
Workbooks.Open Filename:=Excel.Workbooks(WorkName).Path & "\" & Filename '開啟檔案
Set objsheet = Windows(Filename).ActiveSheet '切換視窗
'取消篩選
ActiveSheet.AutoFilterMode = False
'選取來源範圍
' objsheet.Range("A1:AZ500").Select
objsheet.Range(n & ":" & m).Select
'copy
Selection.Copy
Windows(desc).Activate '切換視窗
Sheets.Add '增加活頁
ActiveSheet.Paste '貼上
ActiveSheet.Range("A1").Select '將選取範圍取消
With ActiveSheet
.Rows.RowHeight = 20
End With
ActiveSheet.Name = "No_" & (i - 1)
'ActiveSheet.Name = Windows(WorkName).ActiveSheet.Range("b" & i) '將活頁名稱改成檔案名稱
'避免copy太多資料時,要關閉檔案時.會問記憶體的資料是否要保留
ActiveSheet.Range("A1").Copy
'將來源檔案關閉
Workbooks(Filename).Saved = True
Windows(Filename).Close
i = i + 1 '讀取下一個檔案名稱
Wend
MsgBox "已將所有檔案匯入各項不同worksheet資料表頁籤中"
|