以下代码是将值从A列传输到D列。从A列复制时,值始终粘贴在D列中的下一行空。
是否可以使此代码仅在插入新值时复制A列中的值?因为它现在所做的,它从A列获取所有值,然后在D列中再次粘贴它们。
即。 A栏:a1 = 2; a2 = 3,a3 = 4 ---> D列变为:d1 = 2; d2 = 3; d3 = 4.
现在,如果我在A列中插入另外两个值:a4 = 1; a5 = 2,我只想在D列中传输这两个值,而不是再次传递所有数字。所以D列变为d1 = 2; d2 = 3; d3 = 4,d4 = 1; d5 = 2。
提前致谢!
Private Sub CommandButton3_Click()
Application.ScreenUpdating = False
With Sheets("Sheet1")
.Range("a5", .Range("a5").End(xlDown)).Copy
End With
With Sheets("Sheet1")
.Range("d" & .Rows.Count).End(xlUp)(2).PasteSpecial Paste:=xlPasteValues
End With
End Sub
答案 0 :(得分:2)
根据要求:
这是你能做的:
在按钮/数据所在的工作表中:
Option Explicit
Private Sub Worksheet_Change(ByVal target As Range)
Dim sh As Worksheet
Set sh = ActiveSheet
Dim newdata As Range
Set newdata = Application.Intersect(target, sh.Range("A5", "A" & sh.Rows.Count))
If (Not newdata Is Nothing) Then
If (CopyDataRange Is Nothing) Then
Set CopyDataRange = newdata
Else
Set CopyDataRange = Application.Union(CopyDataRange, newdata)
End If
End If
End Sub
在模块中:
Option Explicit
Public CopyDataRange As Range
Public Sub CommandButton1_Click()
If (Not CopyDataRange Is Nothing) Then
CopyDataRange.Copy CopyDataRange.Offset(0, 3)
Set CopyDataRange = Nothing
End If
End Sub
这样做只是跟踪新值(这是Worksheet_Change
事件的作用),然后当您单击按钮时,它只会将新值复制到D列。它还会重置静态范围CopyDataRange
返回Nothing
,因此您不必重复从之前的按钮点击中复制相同的数据。基本上,按钮单击将刷新CopyDataRange
范围。
编辑:
我决定写一篇关于这个here的帖子来进一步解释。
答案 1 :(得分:0)
正如你们所说的那样有点复杂,我修改了代码,它现在做的是从头开始复制所有内容。不确定这是否是使用的智能解决方案......
Private Sub CommandButton3_Click()
Application.ScreenUpdating = False
With Sheets("Creation")
.Range("a1", .Range("a1").End(xlDown)).Copy End With
With Sheets("Creation")
.Range("d1").PasteSpecial Paste:=xlPasteValues
End With End Sub