将行复制到另一个电子表格上的下一个自由行

时间:2015-12-03 09:38:49

标签: excel vba excel-vba excel-2010

首先,对于Macros和VBA,我是一个菜鸟,所以如果我没有意义,请原谅我。

我有一个Excel电子表格,它基本上是用户及其手机号码和其他一些位(目前使用A-K列)的列表,并按行排序。

如果我更换一个单元格,我需要的是复制整行的方法。因此,如果我更改用户名,它会将该用户的整行复制到第二张工作表上的下一个空白行。

这样做的目的是保留审计线索,以便我们查看以前使用过哪个号码等。

我发现这个:Copy row to another sheet in excel using VBA正在按预期工作,但我不能为我的生活得到它,将单元格复制到下一个自由行,或b,不覆盖现有条目

这是我正在使用的代码:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim a As Range, rw As Range
For Each a In Selection.Areas
    For Each rw In a.Rows
        If rw.Row >= 2 Then
            rw.EntireRow.Copy Sheet2.Cells(2 + (rw.Row - 2) * 3, 1)
        End If
    Next rw
Next a
End Sub

如果有人可以帮我定制它,我真的很感激。

我在Win7上使用Excel 2010。

非常感谢。

1 个答案:

答案 0 :(得分:1)

通常,Intersect method用于确定接收更改的一个或多个单元格是否涉及您关注的一个或多个列。您可以添加其他参数;在这种情况下,我.Offset Worksheet.UsedRange property向下排了一行,以确保第1行没有参与。

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Columns(1), Me.UsedRange.Offset(1, 0)) Is Nothing Then
        On Error GoTo bm_Safe_Exit
        Application.EnableEvents = False 'not really necessary in this case but never a bad idea within a Worksheet_Change
        Dim a As Range
        For Each a In Intersect(Target, Columns(1), Me.UsedRange.Offset(1, 0))
            If CBool(Len(a.Value2)) Then _
                a.EntireRow.Copy _
                    Destination:=Sheet2.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)  'not really sure this is the correct destination
        Next a
    End If
bm_Safe_Exit:
    Application.EnableEvents = True
End Sub

我已经在Worksheet_Change事件宏的持续时间内调用了禁用事件处理的调用。虽然这是Worksheet_Change修改值时的关键步骤,但在此处合并并不重要。但是,如果您想要扩充Worksheet_Change以包含可能会更改工作表上的值的时间戳等内容,则它不会造成损害并且已经存在。