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