excel - 从多个excel文件复制单元格并将它们粘贴到主文件中
问题描述
我得到了这个 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
解决方案
您不需要逐个单元格地复制。您可以一次复制整个范围,这要快得多。
还要确保指定要复制到的工作簿和工作表。永远不要使用Range
或Cells
不指定工作表(否则 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 个复制操作。
推荐阅读
- javascript - 将 NodeJS 与电子应用程序一起打包
- aem - 在 AEM 中激活内容/页面和发布页面有什么区别?
- powershell - 使用 PowerShell 按邮箱大小对 csv 输出文件进行排序
- dependency-injection - 如何订阅 .net Core 中的事件?
- c# - 在另一个文本框中显示字符
- javascript - 如何在 Google Analytics 中设置自定义维度
- angular - 通过 http 使用 API
- angular - 离子获取httpClient
- python - 如何在不冻结其他所有内容的情况下不断更新 Tkinter?
- python - Lambda python中的请求参数