简体   繁体   中英

How to copy values and formatting when copy entire sheet with VBA

I have the code below that works really well.

It copies the active worksheet and creates a new sheet with name based on a specific cell.

Can I modify this to not include formulas when copied? I only want Values and Formatting, so the new sheet is a static snapshot.

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

How about the following as a general method to make a static copy of a worksheet:

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

Also please avoid using ActiveSheet and use explicit references to your worksheets instead.

I modified your code slightly to use variables for your original sheet and your copied sheet. I use .Value2 = .Value2 to remove formulas. Note that this will run into an error if you try to create multiple sheets using the same name in 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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM