excel - 从多个 Excel 文件复制单元格并将其粘贴到主文件中

标签 excel vba

我得到了这个VBA代码,它应该从关闭的Excel文件(位于一个文件夹中)中读出单元格并将内容复制到主文件中。 它似乎按预期读出了文件,但是粘贴复制的内容似乎不起作用。

有什么想法吗?

Sub ReadAndMerceData()

Dim objFs As Object
Dim objFolder As Object
Dim file As Object

Set objFs = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFs.GetFolder("C:\Users\XXX\Desktop\TEST")

Dim iStartRow As Integer
iStartRow = 0

For Each file In objFolder.Files

    Dim src As Workbook
    Set src = Workbooks.Open(file.Path)

    Dim iTotalRows As Integer
    iTotalRows = 50

    Dim iTotalCols As Integer
    iTotalCols = 17
    Dim iRows, iCols As Integer

    For iRows = 1 To iTotalRows
        For iCols = 1 To iTotalCols
            Cells(iRows + iStartRow, iCols) = src.Worksheets("Tabelle1").Cells(iRows, iCols)
        Next iCols
    Next iRows

    iStartRow = iRows + 1
    iRows = 0

    src.Close False
    Set src = Nothing
Next

End Sub

最佳答案

您不需要逐个单元格地复制。您可以一次复制整个范围,这要快得多。

另请确保指定要复制到的工作簿和工作表。切勿在未指定工作表的情况下使用 RangeCells(否则 Excel 会猜测并且可能是错误的)。

Option Explicit

Public Sub ReadAndMerceData()
    Dim objFs As Object        
    Set objFs = CreateObject("Scripting.FileSystemObject")

    Dim objFolder As Object
    Set objFolder = objFs.GetFolder("C:\Users\XXX\Desktop\TEST")

    Dim dest As Worksheet 'define your destination sheet!
    Set dest = ThisWorkbook.Worksheets("DestinationSheet")

    'make them variabes if they are dynamic otherwise use constants if hardcoded.
    Const TotalRows As Long = 50
    Const TotalCols As Long = 17 

    Dim iStartRow As Long

    Dim file As Object
    For Each file In objFolder.Files
        Dim src As Workbook
        Set src = Workbooks.Open(file.Path)

        'copy all cells at once
        dest.Cells(iStartRow + 1, 1).Resize(TotalRows, TotalCols).Value = src.Worksheets("Tabelle1").Cells(1, 1).Resize(TotalRows, TotalCols).Value

        iStartRow = iStartRow + TotalRows + 1

        src.Close SaveChanges:=False
    Next file
End Sub

说明

dest.Cells(iStartRow + 1, 1) 是我们要复制到的第一个单元格,因此使用 .Resize(TotalRows, TotalCols) 我们展开该单元格到一个范围并将其 .Value 设置为等于从第一个单元格 src.Worksheets("Tabelle1").Cells(1, 1) 开始的源工作表范围具有相同数量的行和列.Resize(TotalRows, TotalCols)

请注意,复制整个范围始终比逐个单元格复制相同数据要快,因为只需执行 1 次复制操作。

关于excel - 从多个 Excel 文件复制单元格并将其粘贴到主文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60171992/

相关文章:

arrays - 工作表函数.Small : How to define Array

使用 Selenium 的 Excel VBA

excel - 如何使用 VBA 在桌面副本中选择一系列单元格?

excel - Visual Basic 不匹配

vba - 一列的 Excel VBA 宏,如果为真,则将公式应用于另一列

excel - 如何在多行/单元格上书写

json - 将 JSON 提要自动解析到 MS Access 中

Excel 2016 能够将包含宏的工作簿保存为 .xls,但在保存为 .xlsm 和 .xlsb 时检测到错误

sql-server - Excel 2016 复杂嵌套 IF

excel - 如何使用行输入搜索字符串,然后在 Excel 单元格中打印接下来的 5 行