Reputation: 21
Newbie here, I have a template sheet with a table containing formulas.At the end I want to press a button to create and copy-paste values from template sheet to the new sheet so here is what i got:
Sub CreateSheet()
Dim xName As String
Dim xSht As Object
Dim xNWS As Worksheet
On Error Resume Next
xName = Application.InputBox("Please enter a name for this new sheet ", "New Sheet")
If xName = "" Then Exit Sub
Set xSht = Sheets(xName)
If Not xSht Is Nothing Then
MsgBox "Sheet cannot be created as there is already a worksheet with the same name in this workbook"
Exit Sub
End If
ActiveSheet.Copy after:=Sheets(Sheets.Count)
Set xNWS = Sheets(Sheets.Count)
xNWS.Name = xName
End Sub
Problem is I just want to Paste Values without any formulas from template sheet
Thanks
Upvotes: 0
Views: 82
Reputation: 29592
You could go for a solution that would create an empty sheet manually and use PasteSpecial
with option xlPasteValues
to copy only values - but this would not copy the formatting. You could then use another PasteSpecial
to copy the formatting.
An alternative is to first copy the whole template as you do, including formulas, and add the following statement. It looks odd at first, but it converts all formulas into values.
xNWS.UsedRange.Value2 = xNWS.UsedRange.Value2
Upvotes: 1
Reputation: 687
what you are looking for is the Range.PasteSpecial
method.
full expression is:
PasteSpecial( _Paste_ , _Operation_ , _SkipBlanks_ , _Transpose_ )
see https://learn.microsoft.com/en-us/office/vba/api/excel.range.pastespecial
As of right now you are pasting the entire sheet which is quite ineffective. I suggest familiarising yourself with Listobject(s)
, to define your table in VBA and then use Range("YourTable").PasteSpecial _ Paste:=xlPasteValues
to copy only the values in your table to the new sheet.
here is a quick sample:
Private Sub Sample()
Dim tbl As ListObject
Set tbl =Sheets("YourSheet").Listobjects("YourTable") 'note the "s" in ListObjects
End Sub
To refer to your table range use Range("TableName").ListObject
.
See https://www.dingbatdata.com/2017/11/24/referencing-listobjects-with-vba for more information
Hope this was helpful, have a nice day!
Upvotes: 0