这里有新手,我有一个模板表,里面有一个包含公式的表。最后我想按一个按钮来创建模板表并将其复制粘贴到新表中,所以这就是我得到的:
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
问题是我只想在没有模板表的任何公式的情况下粘贴值
谢谢
您可以选择手动创建空工作表的解决方案,并使用PasteSpecial
选项xlPasteValues
to复制值 - 但这不会复制格式。然后,您可以使用另一个PasteSpecial
来复制格式。
另一种方法是首先复制整个模板,包括公式,然后添加以下语句。它起初看起来很奇怪,但它将所有公式转换为值。
xNWS.UsedRange.Value2 = xNWS.UsedRange.Value2
您正在寻找的是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
希望这很有帮助,祝你有愉快的一天!