创建并复制新工作表

问题描述 投票:0回答:2

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

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

问题是我只想在没有模板表的任何公式的情况下粘贴值

谢谢

excel vba copy paste
2个回答
1
投票

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

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

xNWS.UsedRange.Value2 = xNWS.UsedRange.Value2

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

希望这很有帮助,祝你有愉快的一天!

© www.soinside.com 2019 - 2024. All rights reserved.