Excel 创建和复制新工作表

Excel 创建和复制新工作表,excel,vba,copy,paste,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 Sh

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

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
问题是我只想从模板工作表中粘贴没有任何公式的值


谢谢

您需要的是Range.Paste特殊方法

充分表现为: 粘贴特殊、粘贴、操作、SkipBlanks、转置

到目前为止,您正在粘贴整个工作表,这是非常无效的。我建议您熟悉Listobjects,在VBA中定义表,然后使用RangeYourTable.PasteSpecial uPaste:=xlPasteValues将表中的值仅复制到新工作表中

下面是一个快速示例:

Private Sub Sample()
Dim tbl As ListObject
Set tbl =Sheets("YourSheet").Listobjects("YourTable") 'note the "s" in ListObjects
End Sub
要引用表范围,请使用RangeTableName.ListObject。 有关更多信息,请参阅


希望这是有帮助的,有一个美好的一天

您可以选择手动创建空工作表的解决方案,并使用PasteSpecial和选项XLPasteValues仅复制值,但这不会复制格式。然后可以使用另一个PasteSpecial复制格式

另一种方法是先复制整个模板(包括公式),然后添加以下语句。它一开始看起来很奇怪,但它将所有公式转换为值

xNWS.UsedRange.Value2 = xNWS.UsedRange.Value2

是的,它工作了,尽管它也从模板表复制了命令按钮