仅复制粘贴值 (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 来看,lastrow
或 firstrowDB
没有什么意义
【讨论】:
【参考方案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)的主要内容,如果未能解决你的问题,请参考以下文章