我想在VBA中编写一个代码,它将来自不同excel工作表的数据复制到另一个excel,这些工作表都在一个文件夹中。 我试着写一个循环,它遍历文件夹中的不同excel,打开它们,复制一些内容,然后将其粘贴到另一个excel工作簿的末尾。对于最后一步,我将不得不使用“Dim last as long”,但我还没有。
没有缺陷说明,但宏没有做任何事情。
我是VBA的新手,非常感谢任何建议!
Sub copypaste()
Dim strFileName As String
Dim strFolder As String: strFolder = "L:....xlsx"
Dim strFileSpec As String: strFileSpec = strFolder & "*.xlsx"
strFileName = Dir(strFileSpec)
Do While Len(strFileName) > 0
Dim x As Workbook
Dim y As Workbook
Set x = Workbooks.Open("strFileSpec")
Set y = Workbooks.Open("L:....xlsx")
'Now, transfer values from x to y:
y.Sheets("aaa").Range("C2:BI8").Value = x.Sheets("bbb").Range("A5:BG10")
x.Close
strFileName = Dir
Loop
End Sub
答案 0 :(得分:0)
如果您的Do
循环正在执行,您给出的代码会引发一些错误。因为它没有,我认为你的循环没有执行,你应该在问这里之前验证。如果您不知道如何操作,请阅读Chip Pearson关于如何调试VBA的优秀且简要的教程:
http://www.cpearson.com/excel/DebuggingVBA.aspx
如果您的Do
循环没有执行,那么您的文件夹/文件名和/或DIR
功能的实现就会出现问题。
strFolder
看起来非常可疑,因为"L:....xlsx"
看起来不像有效的文件夹路径。
Dim strFolder As String: strFolder = "L:....xlsx"
这是另一个问题。这一行指示Excel打开名为" strFileSpec"的工作簿(在活动目录中),这是一个字符串文字,而不是类似标识符的变量:strFileSpec
。由于此行不会引发错误,因此问题很可能如上所示(循环未执行),但此也是您需要解决的问题:
Set x = Workbooks.Open("strFileSpec")
应该是:
Set x = Workbooks.Open(strFileName)
它应该是strFileName
(Dir
函数的结果),因为它是您复制/粘贴的源。
此外,你可能应该在循环之外打开y
,并确保它是一个有效的文件名,它目前不是:
Set y = Workbooks.Open("L:....xlsx")
所以,把这一切放在一起,这个:
Sub copypaste()
Dim x As Workbook
Dim y As Workbook
Dim strFileName As String
Dim strFolder As String
Dim strFileSpec As String
Set y = Workbooks.Open("c:\users\your_name\desktop\file.xlsx") '<< This should be the file path of the file you're copying TO.
strFolder = "c:\users\your_name\desktop\" '<< make sure this is a valid path to a FOLDER
strFileSpec = strFolder & "*.xlsx"
strFileName = Dir(strFileSpec)
Do While Len(strFileName) > 0
Set x = Workbooks.Open("strFileSpec")
'Now, transfer values from x to y:
y.Sheets("aaa").Range("C2:BI8").Value = x.Sheets("bbb").Range("A5:BG10")
x.Close
strFileName = Dir
Loop
End Sub
注意以上只是覆盖相同的范围目的地,您需要确保在每次循环迭代时写入不同的目的地,例如:< / p>
Dim i as Long
Do While Len(strFileName) > 0
Set x = Workbooks.Open("strFileSpec")
'Now, transfer values from x to y:
With x.Sheets("bbb").Range("A5:BG10")
y.Sheets("aaa").Range("C2").Resize(.Rows.Count, .Columns.Count).Offset(i).Value = .Value
i = i + .Rows.Count + 1
End With
x.Close
strFileName = Dir
Loop