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

标签 excel 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

非常感谢!

最佳答案

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

你从这个开始

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,因为这里有许多类似的问题/问题和很好的解决方案。

关于excel - 如何创建宏以将数据从一个excel工作表复制到另一个工作表的下一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13455720/

相关文章:

excel - 在多个子 VBA 中使用变量

bash - 如何在 Linux 系统上将多个二进制文件复制到一个文件中?

excel - Excel中问号的意义是什么?

vba - 无法修复类型不匹配错误

excel - VBA - 导入具有特殊字符的 bas 模块

excel - 如何在Excel中使用列作为参数来使用参数化查询?

excel - 使用 VBA 输入单元格公式

c# - 迭代 Excel 引用范围的最快方法 ("C20:F22")

sql-server - 如何在没有数据的情况下以编程方式复制 SQL Server 中的表?

javascript - 将选定的文本复制到剪贴板而不使用 flash - 必须跨浏览器