自动复制到另一张纸的最后一行

我试图从一张表复制行到另一个基于列N是否包含大于0.9的数字。

当我用sub test()replace第一行并从vbaeditor运行macros时,该公式工作,但是我无法通过在工作表原始数据中发生的变化来使其工作。

Private Sub Worksheet_Calculate() Dim i As Long Dim lr1 As Long, lr2 As Long Dim Delta As String Dim wks1 As Worksheet, wks2 As Worksheet Set wks1 = ActiveSheet Set wks2 = Worksheets("Charges") 'change to suit lr1 = wks1.Cells(Rows.Count, "N").End(xlUp).Row For i = 2 To lr1 lr2 = wks2.Cells(Rows.Count, "A").End(xlUp).Row + 1 wks1.Cells(i, "N").EntireRow.Copy Destination:=wks2.Cells(lr2, "A") Next i End Sub 

上面的工作表calcualte将工作,我需要execpt我只需要它现在不复制以前复制的行。

必须将其插入到正在更新列N的工作表代码区域中:

 Private Sub Worksheet_Change(ByVal Target As Range) Dim i As Long Dim lr1 As Long, lr2 As Long Dim Delta As Variant'****************EDIT************ Dim wks1 As Worksheet, wks2 As Worksheet Dim rINT As Range Set rINT = Intersect(Target, Range("N:N")) If rINT Is Nothing Then Exit Sub Set wks1 = ActiveSheet Set wks2 = Worksheets("Charges") 'change to suit lr1 = wks1.Cells(Rows.Count, "N").End(xlUp).Row For i = 2 To lr1 Delta = wks1.Cells(i, "N").Value If Delta > 0.9 Then lr2 = wks2.Cells(Rows.Count, "A").End(xlUp).Row + 1 wks1.Cells(i, "N").EntireRow.Copy Destination:=wks2.Cells(lr2, "A") End If Next i MsgBox "Macro is Done, Thank you for waiting", vbInformation End Sub 

一种方法是将sub重命名为Test并将其放入模块中。 我们称之为Module1。 确保sub不是私人的,所以:

子testing()
   '你的代码在这里
结束小组

然后在VBA编辑器中,您可以转到原始数据工作表,然后从下拉列表中select“工作表变更”function,然后从那里调用您的testing子。 所以它看起来像:

 私人小组Worksheet_Change(BYVAL目标作为范围)
  调用Module1.Test
结束小组 

这将调用原始数据工作表中的任何更改的子testing。 这可能比你想要的要多。 如果您只想在调用“子testing”之前检查某个列是否已更改,则可以将以下代码添加到“工作表更改”过程。 在调用子程序之前,先testing被更改的单元格是否在一定范围内。 在这种情况下,我做了范围列N.

私人小组Worksheet_Change(BYVAL目标作为范围)

  昏暗的范围
  设置r =相交(Target,Me.Range(“N:N”))
  如果r不是那么退出子

  调用Module1.Test

结束小组