使用VBA复制整个工作表时如何复制值和格式

时间:2019-04-22 13:19:28

标签: excel vba

我下面的代码非常有效。

它将复制活动工作表并创建一个新表,该表的名称基于特定的单元格。

我可以修改它以使其在复制时不包括公式吗?我只需要“值和格式”,因此新表是静态快照。

Sub Copyrenameworksheet()
Dim ws As Worksheet
Set wh = Worksheets(ActiveSheet.Name)
ActiveSheet.Copy After:=Worksheets(ActiveSheet.Name)
If wh.Range("C2").Value <> "" Then
ActiveSheet.Name = wh.Range("C2").Value
End If
wh.Activate
End Sub

2 个答案:

答案 0 :(得分:2)

以下是制作工作表静态副本的一般方法:

Dim sht1 As Worksheet 'worksheet to copy from
Dim sht2 As Worksheet 'worksheet to paste to
Set sht1 = ThisWorkbook.Worksheets("Name of the Worksheet to copy from")
sht1.Cells.Copy 'Copy everything in the worksheet
Set sht2 = ThisWorkbook.Worksheets.Add 'create new blank worksheet
sht2.Cells.PasteSpecial xlPasteValues 'first paste values
sht2.Cells.PasteSpecial xlPasteFormats ' then paste formats
sht2.Name="Something" 'give a name to your new worksheet

也请避免使用ActiveSheet,而应使用对工作表的显式引用。

答案 1 :(得分:0)

我稍微修改了代码,以将变量用于原始工作表和复制的工作表。我使用.Value2 = .Value2删除公式。请注意,如果您尝试在C2中使用相同的名称创建多个工作表,则会出现错误。

Sub Copyrenameworksheet()
Dim wsOrig As Worksheet, wsNew As Worksheet

Set wsOrig = Worksheets(ActiveSheet.Name)
wsOrig.Copy , wsOrig
Set wsNew = Worksheets(wsOrig.Index + 1)

If wsOrig.Range("C2").Value <> "" Then
    wsNew.Name = wsOrig.Range("C2").Value
End If

wsNew.UsedRange.Value2 = wsNew.UsedRange.Value2

wsOrig.Activate

End Sub