[英]Range copy-paste vba
下面的代码将值从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
根据要求:
您可以执行以下操作:
在按钮/数据所在的工作表中:
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
事件的Worksheet_Change
),然后单击按钮时,它将仅将新值复制到D列。还将静态范围CopyDataRange
重置为Nothing
因此您不会重复从以前的按钮单击中复制相同的数据。 本质上,单击按钮将刷新CopyDataRange
范围。
编辑:
我决定在此处写一篇有关此内容的文章,以进一步解释它。
正如你们所说的那样,这有点复杂,我修改了代码,现在要做的是从头开始复制所有内容。 不确定这是否是明智的解决方案...
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.