将来自不同Excel的数据复制到同一个文件夹中

时间:2018-06-04 16:16:25

标签: vba excel-vba loops copy-paste excel

我想在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

1 个答案:

答案 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)

它应该是strFileNameDir函数的结果),因为它是您复制/粘贴的

此外,你可能应该在循环之外打开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