【发布时间】:2015-06-24 19:50:32
【问题描述】:
我是 VBA 的完整初学者,我查看了其他主题,但无法真正找到答案(至少我能理解)。
基本上,我在研究项目期间有不同主题的 Excel 工作簿。
我想从主题工作簿复制过去的一些数据并将其粘贴到主工作簿。此代码针对一个主题执行此操作。
它打开选定的工作簿,在正确的位置复制过去所需的内容,然后关闭它,然后打开下一个条件等。
我想找到一种方法告诉它打开下一个工作簿(即:Patient1GlobalP.xlsm 变为 Patient2GlobalP.xlsm,然后是 3,然后是 4...)并执行相同操作,但复制到下一个单元格(复制的范围保持不变,但复制目标的Range("C2").Select 变为Range("D2").Select,C1509 变为 D1509,C3016 变为 D3016,然后是 E,然后是 F...)。我可以手动完成,但必须有一个更优雅的解决方案,比如某种偏移量。
Windows("Patient1GlobalP.xlsm").Activate
Range("B1:B1505").Select
Selection.Copy
Windows("master.xlsx").Activate
Sheets("Ankle X").Select
Range("C2").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Windows("Patient1GlobalP.xlsm").Activate
Range("C1:C1505").Select
Selection.Copy
Windows("master.xlsx").Activate
Sheets("Ankle Y").Select
Range("C2").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Windows("Patient1GlobalP.xlsm").Activate
Windows("Patient1GlobalP.xlsm").Activate
Range("C1:C1505").Select
Selection.Copy
Windows("master.xlsx").Activate
Sheets("Ankle Z").Select
Range("C2").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Windows("Patient1GlobalP.xlsm").Activate
Range("N1:N1505").Select
Selection.Copy
Windows("master.xlsx").Activate
Sheets("Knee X").Select
Range("C2").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Windows("Patient1GlobalP.xlsm").Activate
Range("O1:O1505").Select
Selection.Copy
Windows("master.xlsx").Activate
Sheets("Knee Y").Select
Range("C2").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Windows("Patient1GlobalP.xlsm").Activate
Range("P1:P1505").Select
Selection.Copy
Windows("master.xlsx").Activate
Sheets("Knee Z").Select
Range("C2").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Windows("Patient1GlobalP.xlsm").Activate
Range("I1:I1505").Select
Selection.Copy
Windows("master.xlsx").Activate
Sheets("Hip X").Select
Range("C2").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Windows("Patient1GlobalP.xlsm").Activate
Range("J1:J1505").Select
Selection.Copy
Windows("master.xlsx").Activate
Sheets("Hip Y").Select
Range("C2").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Windows("Patient1GlobalP.xlsm").Activate
Range("J1:J1505").Select
Selection.Copy
Windows("master.xlsx").Activate
Sheets("Hip Z").Select
Range("C2").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Workbooks.Open Filename:="C:\Users\hugo\Desktop\data\Patient1LocalP.xlsx"
Windows("Patient1LocalP.xlsx").Activate
Range("B1:B1505").Select
Selection.Copy
Windows("master.xlsx").Activate
Sheets("Ankle X").Select
Range("C1509").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Windows("Patient1LocalP.xlsx").Activate
Range("C1:C1505").Select
Selection.Copy
Windows("master.xlsx").Activate
Sheets("Ankle Y").Select
Range("C1509").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Windows("Patient1LocalP.xlsx").Activate
Windows("Patient1LocalP.xlsx").Activate
Range("C1:C1505").Select
Selection.Copy
Windows("master.xlsx").Activate
Sheets("Ankle Z").Select
Range("C1509").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Windows("Patient1LocalP.xlsx").Activate
Range("N1:N1505").Select
Selection.Copy
Windows("master.xlsx").Activate
Sheets("Knee X").Select
Range("C1509").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Windows("Patient1LocalP.xlsx").Activate
Range("O1:O1505").Select
Selection.Copy
Windows("master.xlsx").Activate
Sheets("Knee Y").Select
Range("C1509").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Windows("Patient1LocalP.xlsx").Activate
Range("P1:P1505").Select
Selection.Copy
Windows("master.xlsx").Activate
Sheets("Knee Z").Select
Range("C1509").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Windows("Patient1LocalP.xlsx").Activate
Range("I1:I1505").Select
Selection.Copy
Windows("master.xlsx").Activate
Sheets("Hip X").Select
Range("C1509").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Windows("Patient1LocalP.xlsx").Activate
Range("J1:J1505").Select
Selection.Copy
Windows("master.xlsx").Activate
Sheets("Hip Y").Select
Range("C1509").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Windows("Patient1LocalP.xlsx").Activate
Range("J1:J1505").Select
Selection.Copy
Windows("master.xlsx").Activate
Sheets("Hip Z").Select
Range("C1509").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Windows("Patient1LocalP.xlsx").Activate
ActiveWindow.Close
Workbooks.Open Filename:="C:\Users\hugo\Desktop\data\Patient1Nopert.xlsx"
Windows("Patient1Nopert.xlsx").Activate
Range("B1:B1505").Select
Selection.Copy
Windows("master.xlsx").Activate
Sheets("Ankle X").Select
Range("C3016").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Windows("Patient1Nopert.xlsx").Activate
Range("C1:C1505").Select
Selection.Copy
Windows("master.xlsx").Activate
Sheets("Ankle Y").Select
Range("C3016").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Windows("Patient1Nopert.xlsx").Activate
Windows("Patient1Nopert.xlsx").Activate
Range("C1:C1505").Select
Selection.Copy
Windows("master.xlsx").Activate
Sheets("Ankle Z").Select
Range("C3016").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Windows("Patient1Nopert.xlsx").Activate
Range("N1:N1505").Select
Selection.Copy
Windows("master.xlsx").Activate
Sheets("Knee X").Select
Range("C3016").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Windows("Patient1Nopert.xlsx").Activate
Range("O1:O1505").Select
Selection.Copy
Windows("master.xlsx").Activate
Sheets("Knee Y").Select
Range("C3016").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Windows("Patient1Nopert.xlsx").Activate
Range("P1:P1505").Select
Selection.Copy
Windows("master.xlsx").Activate
Sheets("Knee Z").Select
Range("C3016").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Windows("Patient1Nopert.xlsx").Activate
Range("I1:I1505").Select
Selection.Copy
Windows("master.xlsx").Activate
Sheets("Hip X").Select
Range("C3016").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Windows("Patient1Nopert.xlsx").Activate
Range("J1:J1505").Select
Selection.Copy
Windows("master.xlsx").Activate
Sheets("Hip Y").Select
Range("C3016").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Windows("Patient1Nopert.xlsx").Activate
Range("J1:J1505").Select
Selection.Copy
Windows("master.xlsx").Activate
Sheets("Hip Z").Select
Range("C3016").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Windows("Patient1Nopert.xlsx").Activate
ActiveWindow.Close
【问题讨论】:
-
声明一个变量来跟踪下一个打开的行。循环浏览工作簿。从打开的行开始粘贴,并将打开的行增加粘贴的行数。
-
谢谢!我不知道“循环”这个词,所以我搜索了它并且它有所帮助。我认为没有办法专门为 Patient1GlobalP 循环然后 2 然后 3 如果所有文件都在同一个文件夹中,所以我想最好的方法是将每个条件放在不同的文件夹中,然后循环遍历?
-
您可以遍历所有工作簿,然后测试工作簿名称以查看它是否应该附加。或者,您可以使用循环创建要附加的工作簿名称列表,然后对列表中的每个名称执行复制和粘贴操作。
标签: vba excel copy-paste