新手在这里, 我有一个模板表,其中包含一个包含公式的表格。最后,我想按一个按钮来创建值并将值从模板表复制并粘贴到新工作表,这就是我得到的:
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
问题是我只想粘贴值,而没有模板表
中的任何公式谢谢
答案 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
希望这对您有所帮助,祝您愉快!