我是VBA的新手,可以真正使用你的帮助。
我有一个文件夹,有3种类型的文件(APL,PL,BPL)和主文件。我想从每个文件中的特定工作表中提取特定数据,然后将其拉回到主文件中。
我遇到的问题是此文件夹中有超过50个文件(1个APL到19个APL,20个PL到40个PL,41个BPL到56个BPL)。
如何在CONSOLIDATION选项卡中的主文件起始单元格C5,D5,E5中创建一个循环,该循环将拉出特定单元格并以有序方式(1到56行)粘贴它们。
文件夹中的每个文件都应标有数字(1,2,3),后跟APL,PL或BPL。
根据文件名,循环应拉出特定单元格。
对于任何APL文件 - 复制摘要选项卡单元格A1,A2和A7粘贴在主文件合并选项卡中,从C5,D5,E5开始
对于任何PL文件 - 复制数据选项卡单元格D4,D7和G98
对于任何BPL文件 - 清算标签单元格E4,R5,T6
以下是我的CONSOLIDATION表格
1 APL
2 APL
3 APL
4 APL
5 APL
6 APL
7 APL
8 APL
9 APL
10 APL
11 APL
12 APL
13 APL
14 APL
15 APL
16 APL
17 APL
18 APL
19 APL
20 PL
21 PL
22 PL
23 PL
24 PL
25 PL
26 PL
27 PL
28 PL
29 PL
30 PL
31 PL
32 PL
33 PL
34 PL
35 PL
36 PL
37 PL
38 PL
39 PL
40 PL
41 BPL
42 BPL
43 BPL
44 BPL
45 BPL
46 BPL
47 BPL
48 BPL
49 BPL
50 BPL
51 BPL
52 BPL
53 BPL
54 BPL
55 BPL
56 BPL
答案 0 :(得分:0)
这里有一些示例代码可以帮助您入门。理解了复制/粘贴部分后,您应该能够适应其余数据和其余文件。此代码需要存在于主工作簿中,并且在开始运行代码时必须激活/选择主工作簿。
Public Sub test()
Dim tempWb As Workbook
Dim masterWb As Workbook
Set masterWb = ActiveWorkbook
Dim Path As String
'change to your path
Path = "C:\TEMP\test\"
Filename = Dir(Path & "*.xlsm")
Do While Len(Filename) > 0
'make sure the file name contains 1 of the 3 strings
If InStr(Filename, "APL") > 0 Or InStr(Filename, "PL") Or InStr(Filename, "BPL") Then
'split the file name to get the number and file text
splitByPeriod = Split(Filename, ".")
splitBySpace = Split(splitByPeriod(0), " ")
Dim fileNumber As Integer
Dim fileText As String
fileNumber = splitBySpace(0)
fileText = splitBySpace(1)
'activate the master
masterWb.Activate
Worksheets("Consolidation").Activate
Dim rowNumber As Integer
rowNumber = fileNumber + 4
'open the file
Set tempWb = Workbooks.Open(Path & Filename)
If fileText = "APL" Then
'activate the workbook
tempWb.Activate
'activate the summary tab
Worksheets("summary").Activate
'copy the data in range A1
Range("A1").Select
Selection.Copy
'activate your summary workbook
masterWb.Activate
'activate the consolidation tab
Worksheets("Consolidation").Activate
'activate the cell to place the data in
Range("C" & rowNumber).Select
'paste the data
ActiveSheet.Paste
'repeat as necessary
'add additional copy/paste code here
ElseIf fileText = "PL" Then
'add copy/paste code
ElseIf fileText = "BPL" Then
'add copy/paste code
End If
'close the file, don't save, don't display alerts about not saving
Application.DisplayAlerts = False
tempWb.Close False
Application.DisplayAlerts = True
End If
Filename = Dir
Loop
End Sub