【发布时间】:2019-04-11 03:24:49
【问题描述】:
我想根据 I 列中的“是”条件将数据从一张表复制到另一张表。我可以在新工作表中添加数据,但在同一行中一次又一次地复制。我希望我的第 3 行有填充,而不是它们在 5 行比 6 行复制数据等。此代码仅在我从下拉列表中选择是选项时运行。
MS Excel 2013
文件:https://www.dropbox.com/s/hfpjrmm1fgc6my3/EXCEL%20FORMULA.xlsm?dl=0
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lastrow As Long
Dim Response
Dim rng As Range, rngToDel As Range
Dim fAddr As String
If Intersect(Target, Range("I:I")) Is Nothing Then Exit Sub
Application.EnableEvents = False
On Error GoTo ErrHandler
MsgBox (lastrow)
With ThisWorkbook.Worksheets("Sheet2")
Worksheets("Sheet2").Activate
lastrow = ActiveSheet.Cells(.Rows.Count, "A").End(xlUp).Row + 1
MsgBox (lastrow)
If UCase(Target.Value) = "YES" Then
Response = vbYes
If Response = vbYes Then
.Range("A" & lastrow).Resize(, 50).Value = _
Range("A" & Target.Row).Resize(, 50).Value
MsgBox "Record added"
End If
End If
End With
ExitHere:
Application.EnableEvents = True
Exit Sub
ErrHandler:
Resume ExitHere
End Sub
我面临的问题:lastrow 只给我第二行 Sheet2 一次又一次,并用新行覆盖数据。
【问题讨论】:
-
每次更改都需要复制数据吗?每当您需要并复制工作表上的所有内容时,这可能是 1 次刷新。对吗?
-
为什么在完全限定的
With工作表语句中使用ActiveSheet?另外:Range("A" & Target.Row).Resize(, 50).Value之前缺少的.可能会导致问题。 -
附注:您的确切代码对我有用;在
Sheet2的现有数据下复制了 50 列。 -
@Nacorid ,以上代码完美复制数据。问题是当我在 sheet1 中分配 Yes 选项 4-5 行时,在 sheet2 中,所有数据都被最后一个覆盖。
-
@Nacorid 如果我在 sheet1 中选择 5 是,在 sheet2 中我们必须得到 5 行。但它只显示了 lats 一个。上面和下面的代码只会用新的记录覆盖。
标签: excel vba excel-formula