【发布时间】:2016-11-18 21:38:45
【问题描述】:
我有一个包含两列(A 和 B)的工作表...第一列只是一个名称,第二列是一个数字。
如果我对 B 列中的数字进行编辑,我希望 Excel 自动将该整行复制到第二个工作表,以便创建我所做的编辑列表。
第二个工作表将是我对第一个工作表所做的更改的不断更新列表,最新更改(两个更新列的副本)添加到下一个未使用的行。
我希望一些 VBA 技巧可以实现这一点,但需要一些帮助才能实现。
【问题讨论】:
我有一个包含两列(A 和 B)的工作表...第一列只是一个名称,第二列是一个数字。
如果我对 B 列中的数字进行编辑,我希望 Excel 自动将该整行复制到第二个工作表,以便创建我所做的编辑列表。
第二个工作表将是我对第一个工作表所做的更改的不断更新列表,最新更改(两个更新列的副本)添加到下一个未使用的行。
我希望一些 VBA 技巧可以实现这一点,但需要一些帮助才能实现。
【问题讨论】:
在您有数据的工作表中尝试此操作(在 Excel 对象下),例如 Sheet1
Option Explicit
Dim PrevVal As Variant
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 2 Then
Application.ScreenUpdating = False
Dim rng As Range
Dim copyVal As String
Set rng = Nothing
Set rng = Range("A" & Target.Row & ":B" & Target.Row)
'copy the values
With Worksheets("Sheet2").Cells(Rows.Count, 1).End(xlUp)
.Offset(1, 0).Resize(1, rng.Cells.Count).Value = rng.Value
With Worksheets("Sheet1")
Range("A" & Target.Row).Copy
copyVal = CStr(PrevVal)
End With
.Offset(1, 0).PasteSpecial xlPasteFormats
.Offset(1, 1) = copyVal
Application.CutCopyMode = False
End With
End If
Application.ScreenUpdating = True
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Rows.Count > 1 Then Exit Sub
If Target.Columns.Count > 1 Then Exit Sub
PrevVal = Target.Value
End Sub
【讨论】:
copyVal = CStr(PrevVal)和.Offset(1, 1) = copyVal。
根据上面的答案和 cmets,这里有一些额外的代码来检查行号。
Dim row_num As Long
row_num = Cells(Rows.Count, "B").End(xlUp).Row
If row_num > 1 then row_num = row_num + 1 'Add 1 only when row number doesn't equal to 1, otherwise - 1.
【讨论】: