创建并复制新工作表

时间:2019-03-22 13:50:20

标签: excel vba copy paste

新手在这里, 我有一个模板表,其中包含一个包含公式的表格。最后,我想按一个按钮来创建值并将值从模板表复制并粘贴到新工作表,这就是我得到的:

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

问题是我只想粘贴值,而没有模板表

中的任何公式

谢谢

2 个答案:

答案 0 :(得分:1)

您可以寻求一种解决方案,该解决方案将手动创建一个空白表,并使用带有选项PasteSpecial的{​​{1}}仅复制值-但这不会复制格式。然后,您可以使用另一个xlPasteValues复制格式。

一种替代方法是,首先按需复制整个模板,包括公式,然后添加以下语句。乍一看看起来很奇怪,但是它将所有公式转换为值。

PasteSpecial

答案 1 :(得分:0)

您正在寻找的是Range.PasteSpecial方法。

完整表达是:
PasteSpecial( _Paste_ , _Operation_ , _SkipBlanks_ , _Transpose_ )

请参阅https://docs.microsoft.com/en-us/office/vba/api/excel.range.pastespecial

截至目前,您正在粘贴整张纸,效果很差。我建议您熟悉Listobject(s),以便在VBA中定义表,然后使用Range("YourTable").PasteSpecial _ Paste:=xlPasteValues将表中的值仅复制到新表中。

这是一个快速示例:

Private Sub Sample()
Dim tbl As ListObject
Set tbl =Sheets("YourSheet").Listobjects("YourTable") 'note the "s" in ListObjects
End Sub

要引用表格范围,请使用Range("TableName").ListObject
有关更多信息,请参见https://www.dingbatdata.com/2017/11/24/referencing-listobjects-with-vba

希望这对您有所帮助,祝您愉快!