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

时间:2015-01-29 09:40:56

标签: excel vba

感谢您的帮助! 如何更改此代码以将数据复制到现有工作簿(唯一的区别是.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

1 个答案:

答案 0 :(得分:0)

我怀疑您的问题是,一旦打开它,您需要一种方法来引用正确的工作簿。执行此操作的方法是将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"))。如果这些细胞不会改变,这是可以的。或者为了获得更大的灵活性,您可以使用lm函数在循环中向Union()添加其他单元格,例如:

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