从下一张Excel工作表VBA复制和粘贴数据
我是VBA的完全初学者,我研究了其他主题,但没有真正找到答案(至少我能理解) 基本上,在一个研究项目中,我有不同主题的Excel工作簿 我想将主题工作簿中的一些数据复制到主工作簿中。这段代码只针对一个主题 它打开所选工作簿,在正确的位置复制所需内容,然后关闭它,然后打开下一个条件,等等 我想找到一种方法,告诉它打开下一个工作簿(即:Patient1GlobalP.xlsm变为Patient2GlobalP.xlsm,然后变为3,然后变为4…),并执行相同的操作,但复制到下一个单元格(复制的范围保持不变,但从下一张Excel工作表VBA复制和粘贴数据,vba,excel,copy-paste,Vba,Excel,Copy Paste,我是VBA的完全初学者,我研究了其他主题,但没有真正找到答案(至少我能理解) 基本上,在一个研究项目中,我有不同主题的Excel工作簿 我想将主题工作簿中的一些数据复制到主工作簿中。这段代码只针对一个主题 它打开所选工作簿,在正确的位置复制所需内容,然后关闭它,然后打开下一个条件,等等 我想找到一种方法,告诉它打开下一个工作簿(即:Patient1GlobalP.xlsm变为Patient2GlobalP.xlsm,然后变为3,然后变为4…),并执行相同的操作,但复制到下一个单元格(复制的范围保
范围(“C2”)。选择变为范围(“D2”).选择
作为复制目的地,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
这里有一种可能的方法:
Sub Tester()
Const SRC_FLDR As String = "C:\something\myfiles\"
Dim wbM As Workbook, wbS As Workbook, shtS As Worksheet
Dim i As Long, colOff As Long
Set wbM = Workbooks("master.xlsx")
colOff = 0 'paste position offset
For i = 1 To 10 'eg
Set wbS = Workbooks.Open(SRC_FLDR & "Patient" & i & "GlobalP.xlsm")
Set shtS = wbS.Sheets(1)
'copy ranges to specific positions on Master sheets
' offset changes each time through the loop
'NOTE: no need to use Activate/Select here
shtS.Range("B1:B1505").Copy wbS.Sheets("Ankle X").Range("C2").Offset(0, colOff)
shtS.Range("C1:C1505").Copy wbS.Sheets("Ankle Y").Range("C2").Offset(0, colOff)
shtS.Range("C1:C1505").Copy wbS.Sheets("Ankle Z").Range("C2").Offset(0, colOff)
'etc...
'etc...
wbS.Close savechanges:=False
colOff = colOff + 1
Next i
End Sub
声明一个变量以跟踪下一个打开的行。循环阅读作业本。从打开的行开始粘贴,并按粘贴的行数增加打开的行数。谢谢!我不知道“循环通过”这个词,所以我搜索了一下,它帮了我的忙。我不认为有专门针对Patient1GlobalP然后2然后3的循环方法,如果所有文件都在同一个文件夹中,那么我想最好的方法是将每个条件放在不同的文件夹中,然后循环执行?您可以循环执行所有工作簿,然后测试工作簿名称,看看它是否应该追加。或者,您可以使用循环创建要附加的工作簿名称列表,然后对列表中的每个名称执行复制和粘贴操作。