Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 将不同Excel中的数据复制到同一文件夹中_Vba_Excel_Loops_Copy Paste - Fatal编程技术网

Vba 将不同Excel中的数据复制到同一文件夹中

Vba 将不同Excel中的数据复制到同一文件夹中,vba,excel,loops,copy-paste,Vba,Excel,Loops,Copy Paste,我想在VBA中编写一个代码,它将不同excel工作表中的数据复制到另一个excel,这些工作表都位于一个文件夹中。 我尝试编写一个循环,循环遍历文件夹中的不同excel,打开它们,复制一些内容,然后将其粘贴到另一个excel工作簿的末尾。对于最后一步,我将不得不使用“Dim last as long”,但我还没有做到这一点 没有缺陷注释,但宏不执行任何操作 我是VBA的新手,非常感谢您的建议 Sub copypaste() Dim strFileName As String D

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

如果执行了
Do
循环,则给定的代码将引发一些错误。因为它不是,所以我认为你的循环没有执行,你应该在这里询问之前验证一下。如果您不知道如何调试VBA,请阅读Chip Pearson优秀而简短的教程:


如果未执行
Do
循环,则文件夹/文件名和/或
DIR
函数的实现存在问题

例如,
strFolder
看起来非常可疑,因为
的“L:..xlsx”
看起来不是有效的文件夹路径

Dim strFolder As String:strFolder=“L:…xlsx”

还有一个问题。此行指示Excel打开一个名为“strFileSpec”的工作簿(在active directory中),这是一个字符串文字,而不是标识符类似的变量:
strFileSpec
。由于此行没有引发错误,因此问题很可能如上所述(循环未执行),但这也是您需要解决的问题:

Set x=工作簿。打开(“strFileSpec”)

应该是:

Set x=workbook.Open(strFileName)

它应该是
strFileName
(是
Dir
函数的结果),因为它是您复制/粘贴的源

此外,您可能应该在循环之外打开
y
,并确保它是有效的文件名,而当前不是:

Set y=workbook.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

您是否使用F8遍历代码,以查看
Do
循环的主体是否执行?这似乎是一个明显的罪魁祸首。您可能需要一个值
x.Sheets(“bbb”).Range(“A5:BG10”)。值
您也没有复制数据,您正在使1个Range=另一个Range。执行此操作时,两个范围的大小必须相同。
strFolder=“L:…..xlsx”
不是文件夹名称。请查看我的示例代码以在文件夹中循环。您也在同一个目标中复制,因此,只要您解决了字符串分配的问题,上述代码将只处理最后一组值。如果你做一个网络搜索。比较方法和限制可能是值得的。您有机会尝试我的解决方案吗?
    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