将数据从一个打开的工作簿复制到另一个打开的工作簿

以下代码:

Sub CopyData() Dim Wb1 As Workbook, wb2 As Workbook For Each wB In Application.Workbooks If Left(wB.Name, 21) = "Open Order Monitoring" Then Set Wb1 = wB Exit For End If Next Set wb2 = ThisWorkbook Wb1.Sheets(1).Range("A2").Range(.Cells(1, 1), .End(xlDown).Cells(1, 39)).Copy wb2.Sheets(2).Range("B5") End Sub 

macros应该从一个打开的工作簿中复制数据的variables名称(打开订单监控[…]),并粘贴到我运行macros从工作簿的第二张。

但是行:

 Wb1.Sheets(1).Range("A2").Range(.Cells(1, 1), .End(xlDown).Cells(1, 39)).Copy wb2.Sheets(2).Range("B5") 

给我一个错误。 有人可以解决这个问题吗?

以来:

  • 使用完全合格的范围引用(工作簿和工作表)总是比较安全的。 特别是在处理多个工作簿和/或工作表时

  • 如果你只对粘贴值感兴趣,那么使用Range1.value = Range2.Value代替Range对象的.Copy()方法会更快(也更安全)。

那么,这里遵循一个可能的代码:

 Option Explicit Sub CopyData() Dim Wb1 As Workbook, wb2 As Workbook, wB As Workbook Dim rngToCopy As Range For Each wB In Application.Workbooks If Left(wB.Name, 21) = "Open Order Monitoring" Then Set Wb1 = wB Exit For End If Next If Not Wb1 Is Nothing Then '<~~ check if you actually found the needed workbook Set wb2 = ThisWorkbook With Wb1.Sheets(1) Set rngToCopy = .Range("A2:AM2", .Cells(.Rows.Count, "A").End(xlUp)) End With wb2.Sheets(2).Range("B5:AN5").Resize(rngToCopy.Rows.Count).Value = rngToCopy.Value End If End Sub 

请尝试下面的代码

 Sub CopyData() Dim Wb1 As Workbook, wb2 As Workbook, wb As Workbook Set wb2 = ThisWorkbook For Each wb In Workbooks If Left(wb.Name, 21) = "Open Order Monitoring" Then Set Wb1 = wb Exit For End If Next Wb1.Sheets(1).Range("A2:AM2").Copy wb2.Sheets(2).Range("B5") 'Edited here End Sub