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

时间:2015-05-10 13:54:30

标签: excel vba excel-vba

我尝试根据列N是否包含大于0.9的数字,将行从一个工作表复制到另一个工作表。

当我用sub test()替换第一行并从vbaeditor运行宏时,该公式有效但是我无法通过工作表Raw Data中发生的更改来使其工作。

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

上面的工作表计算将适用于我需要的execpt我现在只需要它不复制以前复制的行。

2 个答案:

答案 0 :(得分:1)

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

2**31

答案 1 :(得分:0)

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

Sub Test()
  ' your code here
End Sub

然后在VBA编辑器中,您可以转到原始数据工作表并从下拉列表中选择工作表更改功能,并从那里调用您的测试子。所以它看起来像:

Private Sub Worksheet_Change(ByVal Target As Range)
  Call Module1.Test
End Sub

这将在原始数据工作表中的任何更改上调用Sub Test。这可能比你想要的更多。如果您只想在调用Sub Test之前检查某个列是否已更改,则可以将以下代码添加到Worksheet Change过程中。这会在调用sub之前测试更改的单元格是否在某个范围内。在这种情况下,我制作了范围列N.

Private Sub Worksheet_Change(ByVal Target As Range)

  Dim r As Range
  Set r = intersect(Target, Me.Range("N:N"))
  If r Is Nothing Then Exit Sub

  Call Module1.Test

End Sub