Reputation: 69
I have this code below to copy a range of cells and paste to the next available row on a different worksheet. My issue is that it's pasting the formulas rather than the values. What do I need to change?
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
Thanks in advance guys.
Upvotes: 0
Views: 1967
Reputation: 2477
This is essentially transposing rows to columns from one worksheet to another.
Instead of the many lines of copy/paste with specific ranges, use a loop, Reducing 25-50 lines into 3.
To be used in your specific example, because you happen to be transposing rows to columns. The row number happens to match the column number you are pasting into, so embrace it with a loop.
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
Breaks down like:
Where lRow = 1
Using it as both the row of the source and column of target.
ws2.Cells(DestRow, 1)
is the same as ws2.Range("A" & DestRow)
ws1.Cells(lRow, "V")
is the same as ws1.Range("V1")
Upvotes: 1
Reputation: 2176
Try this for copy only the values:
Instead of
ws1.Range("V1").Copy ws2.Range("A" & DestRow)
use
ws2.Range("A" & DestRow) = ws1.Range("V1")
Upvotes: 0
Reputation: 57683
Instead of
ws1.Range("V1").Copy ws2.Range("A" & DestRow)
do
ws1.Range("V1").Copy
ws2.Range("A" & DestRow).PasteSpecial Paste:=xlPasteValues
Note: Has to be 2 lines of code now!
Upvotes: 0