仅限Excel VBA复制粘贴值(xlPasteValues)

时间:2014-05-29 15:41:33

标签: excel vba excel-vba copy-paste

我正在尝试将sheetA中的整个列复制到Sheet B. sheetA列具有使用formuls形成的值。我只使用 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

7 个答案:

答案 0 :(得分:37)

如果您只想复制整个专栏,可以通过以下方式简化代码:

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

答案 1 :(得分:8)

我会没有复制/粘贴

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

答案 2 :(得分: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

从此代码段开始,lastrowfirstrowDB

中没有多大意义

答案 3 :(得分:1)

你也可以使用它

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

答案 4 :(得分:1)

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

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

答案 5 :(得分:0)

你可以用这个:

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

答案 6 :(得分:-1)

选择= selection.values

这会以非常快的方式做事。