如何根据Excel中的单元格值复制工作表并重命名-屏幕截图

时间:2019-08-19 15:02:15

标签: excel vba

我需要复制工作表并根据单元格值重命名,但是可以创建非动态副本吗? -由于需要更多的屏幕快照,因此所有值都保持不变,使我仍然可以处理原始图像-想法是我可以制作许多静态副本,但仍可以编辑主工作表。

到目前为止,我完成的代码可以完美复制,但是它是动态的,因此当main完成时会更改。我将如何编辑此代码,以便从本质上提供静态图像副本

Private Sub CommandButton3_Click()

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

End Sub

3 个答案:

答案 0 :(得分:0)

添加以下行将有所帮助:

With ActiveSheet
    .UsedRange.Copy
    .UsedRange.PasteSpecial xlPasteValues
End With

您可以使用Range Class的Range.Pastespecial属性

完整代码:

Private Sub CommandButton3_Click()

Dim ws As Worksheet
Set ws = Worksheets(ActiveSheet.Name)
ws.Copy After:=Worksheets(Sheets.Count)

With ActiveSheet
    .UsedRange.Copy
    .UsedRange.PasteSpecial xlPasteValues
End With

If ws.Range("W13").Value <> "" Then
ActiveSheet.Name = ws.Range("W13").Value
End If
ws.Activate

End Sub

答案 1 :(得分:0)

您所缺少的只是复制数据并将其粘贴为值

Private Sub CommandButton3_Click()

Dim ws As Worksheet
Set wh = Worksheets(ActiveSheet.Name)
ActiveSheet.Copy After:=Worksheets(Sheets.Count)
If wh.Range("W13").Value <> "" Then
ActiveSheet.Name = wh.Range("W13").Value
End If
With ActiveSheet.Cells
    .Copy
    .PasteSpecial xlPasteValues
    Application.CutCopyMode = False
    .Range("A1").Select
End With
wh.Activate

End Sub

答案 2 :(得分:0)

两个人建议复制并粘贴特殊值。这增加了将数据移动到剪贴板的操作,剪贴板是Excel外部的外部缓冲区。这具有清除用户剪贴板的副作用。如果他们复制了某些东西,现在将丢失。

这更快并且不会破坏剪贴板:

Private Sub CommandButton3_Click()
    Dim oldSheet As Worksheet
    Set oldSheet = ActiveSheet
    oldSheet.Copy After:=Worksheets(Sheets.Count)
    Dim newSheet As Worksheet
    Set newSheet = ActiveSheet
    If oldSheet.Range("W13").Value <> "" Then
        newSheet.Name = oldSheet.Range("W13").Value
    End If   

    With newSheet.UsedRange
        .Value = .Value
    End With
End Sub