将数据从一个工作簿复制到其他工作簿

Copy data from one workbook to other workbooks

感谢您的帮助! 如何更改此代码以将数据复制到现有工作簿(它们的唯一区别是 .xlsm 格式,文件名是 1.xlsm,...,50.xlsm)而不是创建新的(所有文件在同一个文件夹中)?如果有更多单元格(每第 5 个单元格,从 B2 开始),如何指定范围 lm = Range("B2,G2,L2")

我尝试使用 Workbooks.Open ("1.xlsm") 将数据复制到现有工作簿 Workbooks.Open ("2.xlsm") 等以及何时必须在名称中添加 & ".xlsm"(如 SaveAs)。

Sub CopyM()
  Dim lm As Range, r As Long, c As Long
  Set lm = Range("B2,G2,L2"):  Application.ScreenUpdating = False
  For r = 2 To Cells(Rows.Count, 1).End(xlUp).Row
    Workbooks.Add
    For c = 0 To 4
      lm.Offset(r - 2, c).Copy Cells(r + c, 2)
    Next
    With Workbooks(Workbooks.Count)
      .SaveAs lm.Offset(r - 2, -1).Value: .Close
    End With
  Next
  Application.ScreenUpdating = True
End Sub

我怀疑您的问题是您需要一种方法来在打开工作簿后引用正确的工作簿。这样做的方法是将 workbook 分配给对象变量,然后在每次需要引用工作簿时使用该变量:

Dim wb as Workbook
Set wb = Workbooks.Open("yourfilename.xlsx")
'...
  lm.Offset(r - 2, c).Copy wb.Cells(r + c, 2)
'...
With wb
  .SaveAs lm.Offset(r - 2, -1).Value: .Close
End With

要向 range 添加额外的单元格,您只需键入以逗号分隔的额外单元格引用(例如 Range("B2,G2,L2,Q2,V2"))。如果这些单元格永远不会改变,这是可以的。或者,为了获得更大的灵活性,您可以使用 Union() 函数在循环中向 lm 添加额外的单元格,例如:

Dim col As Long
Dim lm As Range
Set lm = Range("B2")
For col = 7 To 256 Step 5
  Set lm = Union(lm, Cells(2, col))
Next col