How to paste rows by value in excel macro? - excel

I have the following code that copies rows from another sheet to the current sheet at a given location.
ws2 and ws3 are worksheets.
ws3.Range(ws3.Cells(4, 1), ws3.Cells(4,2)).Copy ws2.Cells(2, 2)
How do I change this code to paste only the values of the cells? Current working code copies cells with formulas. I would like to know how to pass pasteSpecial parameters as below ?
ws3.Range(ws3.Cells(4, 1), ws3.Cells(4,2)).Copy ws2.Cells(2, 2).PasteSpecial = xlPasteValues

Break it into two lines and use a parenthesis rather than an = sign.
ws3.Range(ws3.Cells(4, 1), ws3.Cells(4,2)).Copy
ws2.Cells(2, 2).PasteSpecial (xlPasteValues)

Related

VBA- How to copy a column from one workbook and paste its values to another workbook? [duplicate]

I have some VBA code that copys a range from one sheet and then pastes it to another at the first blank line. What it is copying are vlookup formulas so when it pastes it pastes all 0's, how would I go about getting it to paste what it copies as values so the results are retained?
Code:
Private Sub PasteChartDataQtyCompare()
'This step pastes the range of values to the chart data tab
Sheets(1).Range("A6:J22").Copy _
Destination:=Sheets("Chart Data").Cells(Sheets("Chart Data").Rows.Count, 1).End(xlUp).Offset(1, 0)
End Sub
Transfer the values directly bypassing the clipboard.
Private Sub PasteChartDataQtyCompare()
'This step pastes the range of values to the chart data tab
with workSheets(1).Range("A6:J22")
workSheets("Chart Data").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).resize(.rows.count,.columns.count) = .value
end with
End Sub
Use Range Method "Range.PasteSpecial xlPasteValue"
Example:
Sheets("Sheet1").Columns("A").Copy
Sheets("Sheet2").Columns("B").PasteSpecial xlPasteValues
You want to use
.PasteSpecial xlPasteValues
A similar question was answered in detail here: Excel VBA Copy Paste Values only( xlPasteValues )

Copy and Paste Formula from a sheet to another sheet

I am trying to merge multiple sheets into one single sheet using Excel VBA.
I followed the codes in this website There is a function called Sub CopyDataWithoutHeaders()
It gets the first and last row in each sheet, and paste the values at the end of the merged sheet.
'Find the last row with data on the DestSh and sh
StartRow = 2
Last = LastRow(DestSh)
shLast = LastRow(sh)
Set CopyRng = sh.Range(sh.Rows(StartRow), sh.Rows(shLast))
It copies the cell values using the following code:
CopyRng.Copy
With DestSh.Cells(Last + 1, "A")
.PasteSpecial xlPasteValues
.PasteSpecial xlPasteFormats
Application.CutCopyMode = False
End With
This code only copy the values. Since there are formulas in the cells, I changed this part to :
CopyRng.Copy
With DestSh.Cells(Last + 1, "A")
.PasteSpecial xlPasteFormulasAndNumberFormats
Application.CutCopyMode = False
End With
As an alternative I tried this code as well:
CopyRng.Copy DestSh.Cells(Last + 1, "A")
Or the code in the similar question
All of these three solutions, copy the formulas with an extra text (which I assume it is a reference to the original sheets).
for example the formula in the original sheet is:
=(IF([#[Actual Date]]="",[#[Forecast
Date]],[#[Actual Date]]))+[#[Shipping
(days) ]]*2
Where "Forecast Date" "Actual Date", and "Shipping (days)" are column names (Table headers)
And after the merge, it will be:
=(IF(_PMTemplate333574[#[Actual Date]]="",_PMTemplate333574[#[Forecast
Date]],_PMTemplate333574[#[Actual Date]]))+_PMTemplate333574[#[Shipping
(days) ]]*2
For each sheet this reference number (_PMTemplate333574) is different, and for some sheets it returns an error.
I tried to manually delete this reference, but it's time consuming. I was wondering what is it? and how can it be removed?

VBA, empty cell is at last row

In a VBA Excel macro,
I copy rows from another sheet, select a different sheet, and try to find the next open cell before pasting them.
Range("A1").End(xlDown).Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues
The page has a first row of column titles, and find then passes over these to the very last row???
If dummy data
is put in the second row, or if there is data already present,
it works.
WHY is it doing this?
Range.End(xlDown) is equivalent to pressing Ctrl + ↓.
Test it on your own - if you only have a header in Row 1, then you'll jump to the last row in the Worksheet. If you have data below the header, you'll move to that row.
Use Range.End(xlUp) to find the next available row by moving up from the last row on the Worksheet - something like this:
With Sheet1
.Cells(.Rows.Count, 1).End(xlUp).Offset(1).PasteSpecial xlPasteValues
End With
standing your data layout, you can use:
Cells(WorksheetFunction.CountA(Columns(1)) + 1, 1).PasteSpecial Paste:=xlPasteValues
or, using explicit worksheet references (recommended):
With Worksheets("mySheetName")
.Cells(WorksheetFunction.CountA(.Columns(1)) + 1, 1).PasteSpecial Paste:=xlPasteValues
End With

VBA paste as values - how to

I have some VBA code that copys a range from one sheet and then pastes it to another at the first blank line. What it is copying are vlookup formulas so when it pastes it pastes all 0's, how would I go about getting it to paste what it copies as values so the results are retained?
Code:
Private Sub PasteChartDataQtyCompare()
'This step pastes the range of values to the chart data tab
Sheets(1).Range("A6:J22").Copy _
Destination:=Sheets("Chart Data").Cells(Sheets("Chart Data").Rows.Count, 1).End(xlUp).Offset(1, 0)
End Sub
Transfer the values directly bypassing the clipboard.
Private Sub PasteChartDataQtyCompare()
'This step pastes the range of values to the chart data tab
with workSheets(1).Range("A6:J22")
workSheets("Chart Data").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).resize(.rows.count,.columns.count) = .value
end with
End Sub
Use Range Method "Range.PasteSpecial xlPasteValue"
Example:
Sheets("Sheet1").Columns("A").Copy
Sheets("Sheet2").Columns("B").PasteSpecial xlPasteValues
You want to use
.PasteSpecial xlPasteValues
A similar question was answered in detail here: Excel VBA Copy Paste Values only( xlPasteValues )

Excel VBA Selection.Copy no longer works

I'm getting a "Compile error: Expected Function or variable" from this code
Cells(3, 2).Select
ActiveCell.FormulaR1C1 = Formula 'Inserts formula
'Copies formula across the row
Cells(3, 2).Copy
Range(Cells(3, 2), Cells(3, 10)).PasteSpecial xlPasteFormulas
Range(Cells(3, 2), Cells(3, 10)).Select
'Copies the formula down to end of list
selection.Copy '<---- Here it says it can't compile
Range(selection, selection.End(xlDown)).FillDown
Using "selection" here gives the error, yet works in another workbook. I'm trying to insert a formula into a cell, copy it across a range, and fill down to the end of the block of data. How do I either get it to work again? Or, is there another way to populate a range of cells with a formula (which changes often hence putting it in a variable.)
Thank you for your help,
Samuel Smith

Resources