【问题标题】:VBA Excel Script to copy rows with data from one worksheet & paste into another with out overwrittingVBA Excel 脚本用于从一个工作表中复制包含数据的行并粘贴到另一个工作表中而不会覆盖
【发布时间】:2026-02-18 18:20:02
【问题描述】:

Excel 2007

我正在尝试运行 VBA 脚本,该脚本将从一个名为 MSL 的工作表中复制销售分类帐列表,其中包含日期、发票编号、公司名称、总计、小计、净额、增值税等列。

我遇到的第一个问题是我只想复制包含记录的第 2 行及以后的行,并且这个数字每个月都会根据销售额而变化。

例如Jan 有 30 行 二月有 24 行 Mar 有 40 行

接下来,我需要将数据粘贴到名为“SalesDB”的新工作表中,其中包含相同的列 DATE、INVOICE NO、COMPANY NAME、TOTAL、SUB-TOTAL、NETT、VAT。

我遇到的下一个问题是数据被覆盖。

感谢您的帮助 接下来一小时会出去接孩子放学

【问题讨论】:

  • 澄清一下,每个月您都希望将工作表 MSL 中该月的最新销售数据复制到工作表 SalesDB,但在 SalesDB 中保留所有前几个月的数据,即 SalesDB 保留前几个月的销售历史记录?

标签: excel excel-2007 vba


【解决方案1】:

假设Worksheet MLS 如下,Worksheet SalesDB 格式相同:

    A      B           C               D       E           F       G 
1   Date   Invoice No  Company Name    Total   Sub-Total   Nett    VAT  
2   

此代码将从MLS 获取数据并考虑条目数并添加到SalesDB 并避免覆盖。

 Sub CopyPasteSales
     Dim salesData as range, targetRng as range

     Set salesData = Worksheets("MLS").Range("A2:G" & Range("A1").end(xlDown).Row)

     If Worksheets("SalesDB").Range("A2") = vbNullString Then
          Set targetRng = Worksheets("SalesDB").Range("A2") //If no data in SalesDB start in row 2
     Else
          Set targetRng = Worksheets("SalesDB").Range("A1").end(xlDown).Offset(1,0) //If data already in SalesDB, find next free row
     End if

     salesData.Copy Destination:= targetRng
 End Sub

【讨论】:

  • 感谢您的帮助,我真的很感激似乎正在做我需要的所有事情,尽管在我的小男孩下来之前无法正确测试
  • 在 set targetRng 行收到错误“无法在中断模式下执行代码”,这很奇怪,因为它确实有效?不得不将 MLS 更改为 MSL
  • 编辑,抱歉错误是运行时错误'1004'应用程序定义或对象定义错误@Remnant
  • 如果您在 SalesDB 中没有任何数据,则会出错。我现在更新了代码以处理您在 SalesDB 中还没有数据的情况
【解决方案2】:

简短而动态:(未经测试,可能包含拼写错误)

Sub CopyData()
    Dim src As Range, dest As Range
    'set source, exclude first row
    Set src = Worksheets("MLS").Range("A2").CurrentRegion.Offset(1, 0)
    'destination is one row below last row
    Set dest = Worksheets("SalesDB").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
    src.Copy Destination:=dest
End Sub

【讨论】:

    最近更新 更多