从一个工作表复制单元格范围并粘贴到另一个工作表中作为值而不是公式

时间:2015-01-16 12:26:09

标签: excel excel-vba vba

我有以下代码来复制一系列单元格并粘贴到另一个工作表上的下一个可用行。我的问题是它粘贴公式而不是值。我需要改变什么?

Private Sub CopyAuditData_Click()
Dim ws1 As Worksheet, ws2 As Worksheet
    Dim DestRow As Long
    Set ws1 = Sheets("Call Audit Sheet")
    Set ws2 = Sheets("HiddenData")
    DestRow = ws2.Cells(Rows.Count, "A").End(xlUp).Row + 1
    ws1.Range("V1").Copy ws2.Range("A" & DestRow)
    ws1.Range("V2").Copy ws2.Range("B" & DestRow)
    ws1.Range("V3").Copy ws2.Range("C" & DestRow)
    ws1.Range("V4").Copy ws2.Range("D" & DestRow)
    ws1.Range("V5").Copy ws2.Range("E" & DestRow)
    ws1.Range("V6").Copy ws2.Range("F" & DestRow)
    ws1.Range("V7").Copy ws2.Range("G" & DestRow)
    ws1.Range("V8").Copy ws2.Range("H" & DestRow)
    ws1.Range("V9").Copy ws2.Range("I" & DestRow)
    ws1.Range("V10").Copy ws2.Range("J" & DestRow)
    ws1.Range("V11").Copy ws2.Range("K" & DestRow)
    ws1.Range("V12").Copy ws2.Range("L" & DestRow)
    ws1.Range("V13").Copy ws2.Range("M" & DestRow)
    ws1.Range("V14").Copy ws2.Range("N" & DestRow)
    ws1.Range("V15").Copy ws2.Range("O" & DestRow)
    ws1.Range("V16").Copy ws2.Range("P" & DestRow)
    ws1.Range("V17").Copy ws2.Range("Q" & DestRow)
    ws1.Range("V18").Copy ws2.Range("R" & DestRow)
    ws1.Range("V19").Copy ws2.Range("S" & DestRow)
    ws1.Range("V20").Copy ws2.Range("T" & DestRow)
    ws1.Range("V21").Copy ws2.Range("U" & DestRow)
    ws1.Range("V22").Copy ws2.Range("V" & DestRow)
    ws1.Range("V23").Copy ws2.Range("W" & DestRow)
    ws1.Range("V24").Copy ws2.Range("X" & DestRow)
    ws1.Range("V25").Copy ws2.Range("Y" & DestRow)
End Sub

先谢谢你们。

3 个答案:

答案 0 :(得分:1)

这实质上是将行从一个工作表转换为另一个工作表。

使用循环,将25-50行减少为3,而不是使用特定范围的多行复制/粘贴。

要在您的特定示例中使用,因为您恰好将行转置为列。行号恰好与您要粘贴的列号相匹配,因此请将其包含在循环中。

Private Sub CopyAuditData_Click()

Dim ws1 As Worksheet, ws2 As Worksheet
Dim DestRow As Long, lRow As Long

    Set ws1 = Sheets("Call Audit Sheet")
    Set ws2 = Sheets("HiddenData")
    DestRow = ws2.Cells(Rows.Count, "A").End(xlUp).Row + 1

    'CHANGES HERE
    For lRow = 1 To 25
        ws2.Cells(DestRow, lRow).Value = ws1.Cells(lRow, "V").Value 
    Next lRow

End Sub

分解如下:

其中lRow = 1将其用作目标的源行和列的行。

ws2.Cells(DestRow, 1)ws2.Range("A" & DestRow)

相同

ws1.Cells(lRow, "V")ws1.Range("V1")

相同

答案 1 :(得分:0)

而不是

ws1.Range("V1").Copy ws2.Range("A" & DestRow)

DO

ws1.Range("V1").Copy
ws2.Range("A" & DestRow).PasteSpecial Paste:=xlPasteValues

注意:现在必须是2行代码!

答案 2 :(得分:0)

尝试此选项仅复制值:

而不是

ws1.Range("V1").Copy ws2.Range("A" & DestRow)

使用

ws2.Range("A" & DestRow) = ws1.Range("V1")