Excel VBA-循环文件夹中的文件,复制范围,粘贴到此工作簿中
我有500个excel文件和数据。我会将所有这些数据合并到一个文件中 实现此目标的任务列表:Excel VBA-循环文件夹中的文件,复制范围,粘贴到此工作簿中,vba,excel,loops,copy-paste,Vba,Excel,Loops,Copy Paste,我有500个excel文件和数据。我会将所有这些数据合并到一个文件中 实现此目标的任务列表: 我想循环一个文件夹中的所有文件 打开文件 复制此范围“B3:I102” 将其粘贴到活动工作簿的第一页 重复,但将新数据粘贴到下面 我已经完成了任务1-4,但我需要任务5的帮助,最后一点-将数据粘贴到现有数据下并使其动态化。我在代码中用“#####突出显示了这一点 这是我从别人的问题中整理出来的代码:) 有什么建议吗 Sub LoopThroughFiles() Dim MyObj As Object,
Sub LoopThroughFiles()
Dim MyObj As Object,
MySource As Object,
file As Variant
Dim wbThis As Workbook 'workbook where the data is to be pasted, aka Master file
Dim wbTarget As Workbook 'workbook from where the data is to be copied from, aka Overnights file
Dim LastRow As Long
Dim sht1 As Worksheet
Dim sht2 As Worksheet
'set to the current active workbook (the source book, the Master!)
Set wbThis = ActiveWorkbook
Set sht1 = wbThis.Sheets("Sheet1")
Folder = "\\dne\ldc\research-dept\3 CEEMEA\15. EMB\Turkey\TLC Overnight & Weekly Reports\weekly (majeed)\"
Fname = Dir(Folder)
While (Fname <> "")
Set wbTarget = Workbooks.Open(Filename:=Folder & Fname)
wbTarget.Activate
Range("b3:i102").Copy
wbThis.Activate
'################################
'NEED HELP HERE. I GET A ERROR HERE. NEEDS TO BE MORE DYNAMIC.
sht1.Range("b1:i100").PasteSpecial
Fname = Dir
'close the overnight's file
wbTarget.Close
Wend
End Sub
Sub-LoopThroughFiles()
将MyObj作为对象,
MySource作为对象,
文件作为变体
将此作为要粘贴数据的工作簿,也称为主文件
将wbTarget作为工作簿的工作簿,从中复制数据,也称为文件
最后一排一样长
Dim sht1作为工作表
将sht2变暗为工作表
'设置为当前活动工作簿(源工作簿,主工作簿!)
设置wbThis=ActiveWorkbook
设置sht1=wbThis.Sheets(“Sheet1”)
Folder=“\\dne\ldc\research dept\3 CEEMEA\15.EMB\Turkey\TLC隔夜和每周报告\Weekly(majeed)\”
Fname=Dir(文件夹)
While(Fname“”)
设置wbTarget=Workbooks.Open(文件名:=文件夹&Fname)
wbTarget,激活
范围(“b3:i102”)。副本
这个,激活
'################################
“这里需要帮助。我这里有个错误。需要更具活力。
sht1.范围(“b1:i100”).特殊
Fname=Dir
'关闭过夜的文件
wbTarget,关闭
温德
端接头
我看到您已经为此添加了一个长变量,所以请在粘贴之前查找最后一行。此外,如果数据量不同,请粘贴到单个单元格中
我修改了你的剧本如下
Sub LoopThroughFiles()
Dim MyObj As Object,
MySource As Object,
file As Variant
Dim wbThis As Workbook 'workbook where the data is to be pasted, aka Master file
Dim wbTarget As Workbook 'workbook from where the data is to be copied from, aka Overnights file
Dim LastRow As Long
Dim sht1 As Worksheet
Dim sht2 As Worksheet
'set to the current active workbook (the source book, the Master!)
Set wbThis = ActiveWorkbook
Set sht1 = wbThis.Sheets("Sheet1")
Folder = "\\dne\ldc\research-dept\3 CEEMEA\15. EMB\Turkey\TLC Overnight & Weekly Reports\weekly (majeed)\"
Fname = Dir(Folder)
While (Fname <> "")
Set wbTarget = Workbooks.Open(Filename:=Folder & Fname)
wbTarget.Activate
Range("b3:i102").Copy
wbThis.Activate
'Just add this line:
lastrow = sht1.Range("b1").End(xlDown).Row + 1
'And alter this one as follows:
sht1.Range("B" & lastrow).PasteSpecial
Fname = Dir
'close the overnight's file
wbTarget.Close
Wend
End Sub
Sub-LoopThroughFiles()
将MyObj作为对象,
MySource作为对象,
文件作为变体
将此作为要粘贴数据的工作簿,也称为主文件
将wbTarget作为工作簿的工作簿,从中复制数据,也称为文件
最后一排一样长
Dim sht1作为工作表
将sht2变暗为工作表
'设置为当前活动工作簿(源工作簿,主工作簿!)
设置wbThis=ActiveWorkbook
设置sht1=wbThis.Sheets(“Sheet1”)
Folder=“\\dne\ldc\research dept\3 CEEMEA\15.EMB\Turkey\TLC隔夜和每周报告\Weekly(majeed)\”
Fname=Dir(文件夹)
While(Fname“”)
设置wbTarget=Workbooks.Open(文件名:=文件夹&Fname)
wbTarget,激活
范围(“b3:i102”)。副本
这个,激活
'只需添加这一行:
lastrow=sht1.范围(“b1”).结束(xlDown).行+1
"并将此修改如下:
sht1.Range(“B”和lastrow).PasteSpecial
Fname=Dir
'关闭过夜的文件
wbTarget,关闭
温德
端接头
我看到您已经为此添加了一个长变量,所以请在粘贴之前查找最后一行。此外,如果数据量不同,请粘贴到单个单元格中
我修改了你的剧本如下
Sub LoopThroughFiles()
Dim MyObj As Object,
MySource As Object,
file As Variant
Dim wbThis As Workbook 'workbook where the data is to be pasted, aka Master file
Dim wbTarget As Workbook 'workbook from where the data is to be copied from, aka Overnights file
Dim LastRow As Long
Dim sht1 As Worksheet
Dim sht2 As Worksheet
'set to the current active workbook (the source book, the Master!)
Set wbThis = ActiveWorkbook
Set sht1 = wbThis.Sheets("Sheet1")
Folder = "\\dne\ldc\research-dept\3 CEEMEA\15. EMB\Turkey\TLC Overnight & Weekly Reports\weekly (majeed)\"
Fname = Dir(Folder)
While (Fname <> "")
Set wbTarget = Workbooks.Open(Filename:=Folder & Fname)
wbTarget.Activate
Range("b3:i102").Copy
wbThis.Activate
'Just add this line:
lastrow = sht1.Range("b1").End(xlDown).Row + 1
'And alter this one as follows:
sht1.Range("B" & lastrow).PasteSpecial
Fname = Dir
'close the overnight's file
wbTarget.Close
Wend
End Sub
Sub-LoopThroughFiles()
将MyObj作为对象,
MySource作为对象,
文件作为变体
将此作为要粘贴数据的工作簿,也称为主文件
将wbTarget作为工作簿的工作簿,从中复制数据,也称为文件
最后一排一样长
Dim sht1作为工作表
将sht2变暗为工作表
'设置为当前活动工作簿(源工作簿,主工作簿!)
设置wbThis=ActiveWorkbook
设置sht1=wbThis.Sheets(“Sheet1”)
Folder=“\\dne\ldc\research dept\3 CEEMEA\15.EMB\Turkey\TLC隔夜和每周报告\Weekly(majeed)\”
Fname=Dir(文件夹)
While(Fname“”)
设置wbTarget=Workbooks.Open(文件名:=文件夹&Fname)
wbTarget,激活
范围(“b3:i102”)。副本
这个,激活
'只需添加这一行:
lastrow=sht1.范围(“b1”).结束(xlDown).行+1
"并将此修改如下:
sht1.Range(“B”和lastrow).PasteSpecial
Fname=Dir
'关闭过夜的文件
wbTarget,关闭
温德
端接头
您如何将sht1.Range(“b1:i102”)
定义为变量而不是常量
比如:
Dim x As Long
Dim y As Long
x = 1
y = 1
Dim rng As Range
Set rng = Range("b"&x ,"i"&y)
然后使用:
sht1.rng
请记住在while语句的末尾添加
x=x+100和y=y+100
(这样它会在每次粘贴之间更新新值)。如何将sht1.Range(“b1:i102”)
定义为变量而不是常量
比如:
Dim x As Long
Dim y As Long
x = 1
y = 1
Dim rng As Range
Set rng = Range("b"&x ,"i"&y)
然后使用:
sht1.rng
只需记住在while语句末尾添加
x=x+100和y=y+100
(这样它会在每次粘贴之间更新新值)。为什么不放置一个计数器?像这样:
Dim counter As Long
counter = 1
然后:
While (Fname <> "")
Set wbTarget = Workbooks.Open(Filename:=Folder & Fname)
wbTarget.Activate
Range("b3:i102").Copy
wbThis.Activate
'Solution:
sht1.Range("b" & counter & ":i" & counter + 99).PasteSpecial
counter = counter + 100
Fname = Dir
'close the overnight's file
wbTarget.Close
Wend
While(Fname“”)
设置wbTarget=Workbooks.Open(文件名:=文件夹&Fname)
wbTarget,激活
范围(“b3:i102”)。副本
这个,激活
“解决办法:
sht1.范围(“b”和计数器&“i”和计数器+99).特殊粘贴
计数器=计数器+100
Fname=Dir
'关闭过夜的文件
wbTarget,关闭
温德
你为什么不放个柜台呢?像这样:
Dim counter As Long
counter = 1
然后:
While (Fname <> "")
Set wbTarget = Workbooks.Open(Filename:=Folder & Fname)
wbTarget.Activate
Range("b3:i102").Copy
wbThis.Activate
'Solution:
sht1.Range("b" & counter & ":i" & counter + 99).PasteSpecial
counter = counter + 100
Fname = Dir
'close the overnight's file
wbTarget.Close
Wend
While(Fname“”)
设置wbTarget=Workbooks.Open(文件名:=文件夹&Fname)
wbTarget,激活
范围(“b3:i102”)。副本
这个,激活
“解决办法:
sht1.范围(“b”和计数器&“i”和计数器+99).特殊粘贴
计数器=计数器+100
Fname=Dir
'关闭过夜的文件
wbTarget,关闭
温德
我认为使用variant比复制方法有用
Sub LoopThroughFiles()
Dim MyObj As Object, MySource As Object
file As Variant
Dim wbThis As Workbook 'workbook where the data is to be pasted, aka Master file
Dim wbTarget As Workbook 'workbook from where the data is to be copied from, aka Overnights file
Dim LastRow As Long
Dim sht1 As Worksheet
Dim sht2 As Worksheet
Dim vDB As Variant
'set to the current active workbook (the source book, the Master!)
Set wbThis = ActiveWorkbook
Set sht1 = wbThis.Sheets("Sheet1")
Folder = "\\dne\ldc\research-dept\3 CEEMEA\15. EMB\Turkey\TLC Overnight & Weekly Reports\weekly (majeed)\"
Fname = Dir(Folder)
While (Fname <> "")
Set wbTarget = Workbooks.Open(Filename:=Folder & Fname)
vDB = wbTarget.Sheets(1).Range("b3:i102")
'################################
'NEED HELP HERE. I GET A ERROR HERE. NEEDS TO BE MORE DYNAMIC.
sht1.Range("b" & Rows.Count).End(xlUp)(2).Resize(UBound(vDB, 1), UBound(vDB, 2)) = vDB
Fname = Dir
'close the overnight's file
wbTarget.Close
Wend
End Sub
Sub-LoopThroughFiles()
Dim MyObj作为对象,MySource作为对象
文件作为变体
将此作为要粘贴数据的工作簿,也称为主文件
将wbTarget作为工作簿的工作簿,从中复制数据,也称为文件
最后一排一样长
Dim sht1作为工作表
将sht2变暗为工作表
作为变体的Dim vDB
'设置为当前活动