繁体   English   中英

范围复制粘贴VBA

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM