例如,如果仅在A:A范围内更改单元格A8,则复制D4:D8并将其作为值粘贴到工作表“ ADP”中的同一位置,即D4:D8。
为此,我尝试了以下宏
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.range = "A:A" Then
Call copy_paste_as_value
End If
End Sub
Sub copy_paste_as_value()
Range("d4").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Sheets("ADP").Activate
Range("B4").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("C4").Select
Application.CutCopyMode = False
End Sub
我只想复制单元格值发生变化的数据,但是它将整个表复制到另一张纸上。
对我来说,主要问题是弄清楚哪个单元格发生了更改,并仅从哪个单元格值发生更改复制该列中的数据。
在这里,要注意的是,只有在范围A:A中有变化,并且不需要复制粘贴以外的任何其他单元中的变化时,才应该复制数据。
将提供任何帮助。 谢谢。
答案 0 :(得分:2)
假设相对范围是一致的,请尝试
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range
If Target.Column = 1 And Target.Row > 4 Then
Set r = Target.Offset(-4, 3).Resize(5)
Worksheets("ADP").Range(r.Address).Value = r.Value
End If
End Sub
答案 1 :(得分:1)
您可以尝试:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim wsSou As Worksheet, wsDes As Worksheet
'Set the worksheets to avoid conflicts
Set wsSou = Target.Worksheet
Set wsDes = ThisWorkbook.Worksheets("ADP")
If Not Intersect(Target, Range("A:A")) Is Nothing And Target.Count = 1 Then
wsDes.Range(wsDes.Cells(Target.Row, 4), wsDes.Cells(Target.Row, 9)).Value = wsSou.Range(wsSou.Cells(Target.Row, 4), wsSou.Cells(Target.Row, 9)).Value
End If
End Sub