如何创建宏以将数据从一个Excel工作表复制到另一个工作表中的下一行

时间:2012-11-19 14:21:49

标签: excel excel-vba copy vba

我有点难过,想知道是否有人可以帮忙吗?我在excel中创建了一个宏,将一些数据从一个工作表复制到另一个工作表。它运行正常,但显然每次运行宏时,它都会完成顶行(就像我在录制时粘贴的那样)。我实际上希望它工作,以便每次运行宏时,它都会将数据复制到新行。

如果有帮助,我可以粘贴文档的链接。我确定这只是将一些VBA代码粘贴到宏中的情况。目前,代码如下所示:

Sub Macro1()
'
' Macro1 Macro
'

'
    Sheets("Quotation System").Select
    Range("K9").Select
    Selection.Copy
    Sheets("Confirmed Bookings").Select
    Range("A2").Select
    ActiveSheet.Paste
    Range("B2").Select
    Sheets("Quotation System").Select
    Range("K11").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Confirmed Bookings").Select
    ActiveSheet.Paste
    Sheets("Quotation System").Select
    Range("K13").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Confirmed Bookings").Select
    Range("C2").Select
    ActiveSheet.Paste
    Sheets("Quotation System").Select
    Range("K15").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Confirmed Bookings").Select
    Range("D2").Select
    ActiveSheet.Paste
    Columns("D:D").EntireColumn.AutoFit
    Columns("D:D").EntireColumn.AutoFit
    Columns("D:D").ColumnWidth = 10.86
    Sheets("Quotation System").Select
    Range("K17").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Confirmed Bookings").Select
    Range("E2").Select
    ActiveSheet.Paste
    Range("F2").Select
    Sheets("Quotation System").Select
    Range("K19").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Confirmed Bookings").Select
    ActiveSheet.Paste
    Columns("F:F").ColumnWidth = 8.57
    Sheets("Quotation System").Select
    Range("K21").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Confirmed Bookings").Select
    Range("G2").Select
    ActiveSheet.Paste
    Range("H2").Select
    Sheets("Quotation System").Select
    Range("K23").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Confirmed Bookings").Select
    ActiveSheet.Paste
    Range("I2").Select
    Sheets("Quotation System").Select
    Range("K25").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Confirmed Bookings").Select
    ActiveSheet.Paste
    Sheets("Quotation System").Select
    Range("K7").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Confirmed Bookings").Select
    Range("J2").Select
    ActiveSheet.Paste
    Range("K2").Select
    Sheets("Quotation System").Select
    Range("G29").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Confirmed Bookings").Select
    ActiveSheet.Paste
    Columns("K:K").EntireColumn.AutoFit
    Columns("K:K").ColumnWidth = 6
    Columns("K:K").ColumnWidth = 7
    Range("K2").Select
    Application.CutCopyMode = False
    ActiveCell.FormulaR1C1 = "='Quotation System'!R[27]C[-4]"
    Range("K3").Select
    Columns("J:J").EntireColumn.AutoFit
    Range("I19").Select
    Columns("A:A").ColumnWidth = 8.43
End Sub
Sub Booking_confimred()

End Sub

非常感谢!

1 个答案:

答案 0 :(得分:3)

因为您记录了特定于特定情况的宏,所以我想向您展示一种改进此宏并将这些副本放置到特定位置的基本方法:

你从这个

开始
Public Sub Macro1()

  Application.CutCopyMode = False

然后,这就是宏重写器用来复制的内容:

Sheets("Quotation System").Select
Range("K9").Select
Selection.Copy

您可以使用以下内容:

Sheets("Quotation System").Range("K9").Copy

这是宏录制器用来粘贴的内容:

Sheets("Confirmed Bookings").Select
Range("A2").Select
ActiveSheet.Paste

您可以使用以下内容:

Sheets("Confirmed Bookings").Range("A2").Paste

为了将其粘贴到新行,它就像

   With Sheets("Confirmed Bookings")
     .Cells(.UsedRange.Columns(1).Rows.Count + 1, 1).Paste
   End With

然而,这不是解决这个问题的唯一方法,而且肯定不是最好的方法,但它可以帮助你理解VBA。

如果你想要一个更整洁的解决方案,你可能想在SO上搜索,因为这里有许多类似的问题/问题和良好的解决方案。