尝试将数据从一个工作表发送到另一个时出现问题

我试图将数据从一个工作表发送到非活动工作簿中的另一个工作表。 该代码正确复制数据并closures我的工作簿,但它不会粘贴数据。 我将每个月发送一次数据,并且希望在旧数据之后添加新的数据。

任何人都可以帮我find错误?

Sub Send() Workbooks.Open Filename:="FILENAME" Workbooks("NAME").Activate Worksheets("Sheet1").Activate Range("A3:D19").Copy ActiveWorkbook.Close True Workbooks("NAME").Activate erow = Sheet1.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row ActiveSheet.Paste Destination:=Worksheets("Sheet1").Range(Cells(erow, 1), Cells(erow, 4)) ActiveWorkbook.Save ActiveWorkbook.Close True End Sub 

您不需要激活工作簿或工作表来复制/粘贴数据。 实际上,最好不要这样做,因为当工作表之间的macros跳转的时候,屏幕是闪烁的。

这里是代码如何完成(代码中的注释)。 您只需要将path放到源文件和目标文件中即可。

 Sub Send() 'Prefixes means: ' wkb - workbook ' wks - worksheet ' rng - range Dim wkbSource As Excel.Workbook Dim wkbDestination As Excel.Workbook Dim wksSource As Excel.Worksheet Dim wksDestination As Excel.Worksheet Dim rngSource As Excel.Range Dim rngDestination As Excel.Range Dim lastRow As Long Dim sourceFilePath As String Dim destinationFilePath As String '---------------------------------------- 'Defining paths to files. sourceFilePath = "..." destinationFilePath = "..." 'Set references to source workbook, worksheet, range. Set wkbSource = Workbooks.Open(Filename:=sourceFilePath) Set wksSource = wkbSource.Worksheets("Sheet1") Set rngSource = wksSource.Range("A3:D19") 'Set references to destination workbook, worksheet, range. Set wkbDestination = Workbooks.Open(Filename:=destinationFilePath) Set wksDestination = wkbDestination.Worksheets("Sheet1") With wksDestination lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row + 1 Set rngDestination = .Range(.Cells(lastRow, 1), .Cells(lastRow, 4)) End With Call rngSource.Copy(Destination:=rngDestination) 'Close files and clear variables. Call wkbSource.Close(False) Call wkbDestination.Close(True) End Sub 

这工作:

 Sub Send() Dim wb As Workbook Set wb = Workbooks.Open("C:\...\Name.xlsx") wb.Worksheets(1).Range("A3:D19").Copy ThisWorkbook.Worksheets(1).Range("A1").PasteSpecial xlPasteValues wb.Close End Sub 

这样做, wb必须打开,直到copy paste完成。 如果要在将所有数据保存在object之前closures它。 如果我错了,请纠正我。