仅复制粘贴值 (xlPasteValues)

Posted

技术标签:

【中文标题】仅复制粘贴值 (xlPasteValues)【英文标题】:Copy Paste Values only( xlPasteValues ) 【发布时间】:2014-07-19 04:34:04 【问题描述】:

我正在尝试将工作表 A 中的整个列复制到工作表 B。工作表 A 列具有使用公式形成的值。我只使用 xlPasteValues 复制 SheetA 列值。但它不会将值粘贴到另一个 sheetB。 sheetB 中的列是空的。 我的 VBA 代码

    Public Sub CopyrangeA()

    Dim firstrowDB As Long, lastrow As Long
    Dim arr1, arr2, i As Integer

    firstrowDB = 1
    arr1 = Array("BJ", "BK")
    arr2 = Array("A", "B")

         For i = LBound(arr1) To UBound(arr1)
        With Sheets("SheetA")
           lastrow = Application.Max(3, .Cells(.Rows.Count, arr1(i)).End(xlUp).Row)
           .Range(.Cells(1, arr1(i)), .Cells(lastrow, arr1(i))).Copy
           Sheets("SheetB").Range(arr2(i) & firstrowDB).PasteSpecial xlPasteValues
        End With
    Next
    Application.CutCopyMode = False

End Sub

【问题讨论】:

对我来说似乎工作正常。你有任何错误吗? 没有错误。 SheetB 列为空 您是否尝试过在主窗口旁边单步执行代码?分解代码也可能有助于发现您的错误。也许添加一些.Select's,同时逐步尝试并查明发生了什么,但似乎没有任何东西阻止代码工作,据我自己运行后所见,我能做的不多建议。 Using The Transfer Method 在常规复制粘贴中获得 #N/A 值时帮助了我 【参考方案1】:

如果您只想复制整个列,您可以通过执行以下操作大大简化代码:

Sub CopyCol()

    Sheets("Sheet1").Columns(1).Copy

    Sheets("Sheet2").Columns(2).PasteSpecial xlPasteValues

End Sub

或者

Sub CopyCol()

    Sheets("Sheet1").Columns("A").Copy

    Sheets("Sheet2").Columns("B").PasteSpecial xlPasteValues

End Sub

或者如果你想保持循环

Public Sub CopyrangeA()

    Dim firstrowDB As Long, lastrow As Long
    Dim arr1, arr2, i As Integer

    firstrowDB = 1
    arr1 = Array("BJ", "BK")
    arr2 = Array("A", "B")

    For i = LBound(arr1) To UBound(arr1)

        Sheets("Sheet1").Columns(arr1(i)).Copy

        Sheets("Sheet2").Columns(arr2(i)).PasteSpecial xlPasteValues

    Next
    Application.CutCopyMode = False

End Sub

【讨论】:

我会尽可能避免使用剪贴板进行自动化。如果用户或其他应用程序同时使用剪​​贴板,则数据可能会出现在意想不到的地方。这可能会导致数据丢失甚至机密信息泄露。【参考方案2】:

就我个人而言,如果您只需要列,我也会将其缩短一点:

For i = LBound(arr1) To UBound(arr1)
    Sheets("SheetA").Columns(arr1(i)).Copy
    Sheets("SheetB").Columns(arr2(i)).PasteSpecial xlPasteValues
    Application.CutCopyMode = False
Next

从这段代码 sn-p 来看,lastrowfirstrowDB 没有什么意义

【讨论】:

【参考方案3】:

由于您只想复制值,因此您可以将 arr1 的值直接传递给 arr2 并避免复制/粘贴。

For 循环内的代码,With 块内,lastrow 计算后:

Sheets("SheetB").Range(arr2(i) & firstrowDB).Resize(lastrow).Value = .Range(arr1(i) & 1).Resize(lastrow).Value

【讨论】:

这应该是答案。【参考方案4】:

你可以使用这个:

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

【讨论】:

【参考方案5】:

你也可以用这个

Sub CopyPaste()
Sheet1.Range("A:A").Copy

Sheet2.Activate
col = 1
Do Until Sheet2.Cells(1, col) = ""
    col = col + 1
Loop

Sheet2.Cells(1, col).PasteSpecial xlPasteValues
End Sub

【讨论】:

【参考方案6】:

selection=selection.values

这样做的速度非常快。

【讨论】:

请澄清这是如何回答原始问题的? 这是一种有趣的方式,可以仅使用值覆盖选择中的数据,但并不能真正解决所提出的问题。【参考方案7】:

我以前也遇到过这个问题,我想我找到了答案。

如果您使用按钮来运行宏,它可能链接到不同的宏,可能是您当前正在使用的另存为版本,您甚至可能没有意识到这一点。尝试直接从 VBA (F5) 运行宏,而不是使用按钮运行它。我的猜测是这会奏效。您只需将按钮上的宏重新分配给您实际要运行的宏即可。

【讨论】:

以上是关于仅复制粘贴值 (xlPasteValues)的主要内容,如果未能解决你的问题,请参考以下文章

vscode怎样用鼠标拖动复制粘

解决word中的文档复制到博客中图片不清晰的问题

linux中的复制粘贴快捷键

DataGridView完美解决复制粘贴功能

NOIP模拟题——复制&粘贴2

Android - 防止edittext复制/粘贴并双击全选[重复]